【问题标题】:Retatrget every SQL statement before its execution在执行之前重新获取每个 SQL 语句
【发布时间】:2019-05-18 14:57:57
【问题描述】:

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

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

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

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

SELECT APPLICATION_NAME FROM **MY_SCHEMA**.APPLICATIONS

SELECT APPLICATION_NAME FROM **NEW_SCHEMA**.APPLICATIONS

正如我看到的这个问题的解决方案 - 将一些代码注入我的应用程序内部的每个IDbCommand,但无法想象开始点。

请有任何建议。

【问题讨论】:

  • 您可以将其作为整个连接字符串或架构作为 appsetting 包含在 app.config 中。
  • 这是解决方案的一部分。但是如何在不触及所有人的情况下在所有 DataCommand 对象中进行替换?

标签: c# ado.net .net-2.0


【解决方案1】:

今天的解决方法:

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

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);
}

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多