自定义ADO.NET提供程序来拦截和修改sql查询

时间:2011-02-07 06:51:58

标签: c# .net ado.net

我们的客户端有一个应用程序,它将blob存储在数据库中,现在已经增长到足以影响SQL Server的性能。为了解决这个问题,我们计划将所有blob卸载到文件系统,并将文件路径保留在用户表的新列中。

例如,如果用户有一个包含列id,名称和内容(blob)的表文档;我们会要求他在此表中添加一个新列'filepath'。

我们的客户愿意在此数据库中进行此更改。但是,当涉及到更改sql查询以读取和写入此表时,他们还没有准备接受这个。实际上,他们不希望任何导致重新编译和部署的更改。

现在我们计划编写一个

的自定义ADO.NET提供程序
  • 拦截选择查询
  • 在select语句的末尾添加一个列'filepath'
  • 根据'filepath'值
  • 撤消结果集并修改'content'列值

您认为这种方法肯定会失败吗?

我知道这听起来很脏但我们有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试将列切换为FILESTREAM数据类型?这将完成您描述的所有内容,将数据 out 推送到文件系统中。当然,访问仍然需要虽然服务器作为TDS,但您可能会发现影响较小,并且您可以逐步更改代码以更直接地访问该文件(为了提高性能) - 最后一步涉及更改查询。