自定义 ADO.NET 提供程序以拦截和修改 sql 查询
Posted
技术标签:
【中文标题】自定义 ADO.NET 提供程序以拦截和修改 sql 查询【英文标题】:Custom ADO.NET provider to intercept and modify sql queries 【发布时间】:2011-02-07 06:51:57 【问题描述】:我们的客户端有一个将 blob 存储在数据库中的应用程序,该应用程序现在已经增长到足以影响 SQL Server 的性能。为了解决这个问题,我们计划将所有 blob 卸载到文件系统,并将文件路径保留在用户表的新列中。
如果用户有一个表格文档,其中包含 id、name 和 content (blob) 列;我们会要求他在此表中添加一个新列“文件路径”。
我们的客户愿意在此数据库中进行此更改。但是当涉及到更改 sql 查询以读取和写入该表时,他们还没有准备好接受这一点。实际上,他们不希望进行任何导致重新编译和部署的更改。
现在我们计划编写一个自定义的 ADO.NET 提供程序,它将
拦截选择查询 在 select 语句的末尾添加一列“文件路径” 检索结果集并根据“文件路径”值修改“内容”列值您认为这种方法肯定会失败吗?
我知道这听起来很脏,但我们有更好的方法吗?
【问题讨论】:
【参考方案1】:您是否尝试将列切换为FILESTREAM
数据类型?这将完成您描述的所有操作,将数据库中的数据 out 推送到文件系统中。当然,访问仍然需要虽然服务器作为TDS,但您可能会发现影响较小,您可以逐步更改代码以更直接地访问文件(以提高性能)- 这最后一步将涉及更改查询。
【讨论】:
客户还希望将他们的大部分非活动数据移动到云端,这也应该是非侵入式的。我们必须有一些自定义实现来管理它。以上是关于自定义 ADO.NET 提供程序以拦截和修改 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
64 位 .NET Informix ADO.NET 提供程序的程序集加载错误