1

バックグラウンド:

実行する一連のSQLクエリがあります。クエリによっては、置き換えるスカラー変数が存在する場合があります。

質問:

SqlCommandその変数がクエリで使用されていない場合でも、スカラー変数をに追加することは可能ですか?

例:

クエリ#1はスカラー変数を使用できます@CashSubが、クエリ#2は使用しません。@CashSubエラーを受け取らずにパラメータとして追加できますか?

コード:

private void InsertStatements()
{
    foreach (string Query in Client.InsertStatements(CurrentCompany.Modules.ToArray()))
    {
        foreach (Branch CompBranch in CurrentCompany.Branches)
        {
            SqlCommand cmd = new SqlCommand(Query);
            cmd.Parameters.AddWithValue("DataDB", CompBranch.AppDB);
            cmd.Parameters.AddWithValue("OrigCpnyID", CompBranch.CompanyId);
            cmd.Parameters.AddWithValue("CashAcct", CompBranch.CashAccount);
            cmd.Parameters.AddWithValue("CashSub", CompBranch.CashSubAccount);

            Queries.RunQuery2(cmd, DestinationConnection.ConnectionString);
        }
    }       
}
4

1 に答える 1

2

各 addparam の前に次のようなものを追加することについてどう思いますか:

   if(Query.Contains("DataDB")) cmd.Parameters.AddWithValue("DataDB",...)

名前と値を使用して辞書にパラメーターを格納し、ループスルーすることもできます。

編集:

つまり:

   var paramRegistry = new Dictionary<string,object>{
      {"@DataDB", CompBranch.AppDB},
      {"@OrigCpnyID", CompBranch. CompanyId},
      {"@CashAcct", CompBranch. CashAccount},
      {"@CashSub", CompBranch. CashSubAccount},
      ...
  };

  foreach (string Query in Client.InsertStatements(CurrentCompany.Modules.ToArray()))
  {
    foreach (Branch CompBranch in CurrentCompany.Branches)
    {
        SqlCommand cmd = new SqlCommand(Query);

        foreach(var parName in paramRegistry.Keys){
            if (Query.Contains(parName)){
                 cmd.Parameters.AddWithValue(parName,paramRegistry[parName]);
            }
        }

        Queries.RunQuery2(cmd, DestinationConnection.ConnectionString);
    }
}   
于 2013-01-25T17:42:26.203 に答える