在执行之前重新获取每个 SQL 语句

Retatrget every SQL statement before its execution

我的 C# 应用程序需要一些帮助。

现在它工作正常,但客户的新要求之一是在程序启动前使用可选择的任何用户模式实施底层数据库(MS SQL 或 Oracle)。

在我的应用程序内部大约有 150 个 DataCommand 对象

所以我需要在我的应用程序执行之前捕获每个 SQL 表达式并更改目标对象的位置。例如更改:

SELECT APPLICATION_NAME FROM **MY_SCHEMA**.APPLICATIONS

SELECT APPLICATION_NAME FROM **NEW_SCHEMA**.APPLICATIONS

正如我所见,这个问题的解决方案是在我的应用程序中的每个 IDbCommand 中注入一些代码,但无法想象起点。

有什么建议吗

今天的解决方法:

从配置文件中读取新架构所有者:

System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();
String strSchemaOwner = ((string)(configurationAppSettings.GetValue("DatabaseOwner", typeof(string))));

每个表单都有一个数据库命令列表(类似于表单控件),其中填充了命令对象。

FormLoad 事件中,我将此数组传递给替换每个命令文本的方法:

foreach(IDbCommand pCommand in arrCollection)
{
    pCommand.CommandText = pCommand.CommandText.Replace("MY_SCHEMA", strSchemaOwner);
}