0

配列の内容を使用してテーブルを検索するクエリを使用して、DB2 データベース内のすべてのレコードをカウントしようとしています。

           string[] strNumbers = txtNumbers.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

               string strSearch = "";
                   strSearch = "SELECT COUNT(*) FROM TABLENAME WHERE NUMBER = '" + strNumbers + "' AND COMMENT = '" + strMessage + "'";

                DB2Command cmdSearchTable = new DB2Command(strSearch, db2Connection);

                int nodeCount = 0;
                nodeCount = int.Parse(cmdSearchTable.ExecuteScalar().ToString());

if (nodeCount == 0) {
 Not Found          
 } else
  { Found
   }

このコードは例外をスローします ({"EXECUTE または OPEN ステートメントのホスト変数の値は、対応する使用の範囲外です。"})

ただし、strNumbers.Length を使用するとエラーは発生しませんが、nodeCount はまだ 0 です。

ループする必要がありますか、それとも別のものですか?同じプログラムからデータベースに選択、挿入できるため、クエリとデータベース接続は問題ありません。

ありがとう

編集 - 私はこれを解決することができました(受け入れられた回答を参照)が、別の問題があります。「1234567」がデータベースにあるとしましょう。1 が返されたら問題ありません。入力がデータベースにない「5551234」の場合、0 が返されますが、これも問題ありません。ただし、問題は、入力が '1234567,5551234' の場合、5551234 がデータベースにない場合でも、1234567 がデータベースにあるため、Count は 1 を返します。

1234567 に対して 1 を出力し、5551234 に対して 0 を出力する方法はありますか?

4

1 に答える 1

0

変更してみる

WHERE NUMBER = '" + strNumbers + "' AND

WHERE NUMBER IN (" + strNumbers + ") AND

strNumbers がカンマで区切られていることを確認してください。フィールド NUMBERS のデータ型に応じて、この '12345'、12346'、'12347' または 12345,12346,12347 のようなもの。

于 2016-04-05T10:34:27.563 に答える