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

标签 c# .net ado.net

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

就像用户有一个包含列 id、名称和内容 (blob) 的表 docs;我们会要求他在此表中添加一个新列“文件路径”。

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

现在我们计划编写一个自定义的 ADO.NET 提供程序,它将

  • 拦截选择查询
  • 在选择语句的末尾添加一列“文件路径”
  • 获取结果集并根据'filepath'值修改'content'列值

有没有您认为使用这种方法肯定会失败的用例?

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

最佳答案

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

关于c# - 自定义 ADO.NET 提供程序拦截和修改 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918735/

相关文章:

.net - 当 ADO.NET 查询无法检索请求的数据时应抛出什么异常?

c# - 不将输出写入控制台的处理

c# - 使用特定于类型的值初始化 C# 泛型

.net - VS 2008问题->>无法启动程序

c# - datagridview鼠标悬停事件如何判断你在哪一列

c# - 删除不同目录下的重复文件

mysql - 如何在MVC Entity Framework 中使用Mysql数据库

ms-access - 插入的记录在 MS Access 数据库 C#.NET 中自动排序

c# - 覆盖 WinForms 中的选项卡行为

c# - 无法通过代码访问 WinRT 中使用属性点表示法的 .resw 字符串资源?