自定义 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

.net数据库连接详解

巩固ADO.NET

ADO.NET 数据连接查询

64 位 .NET Informix ADO.NET 提供程序的程序集加载错误

实体框架寻找 ADO.NET 提供程序 SqlServerCe.3.5 而不是 4.0

SpringMVC之HandlerInterceptor拦截器详解