0

私が理解している次のコードは、パラメーター化されたステートメントを作成し、そのパラメーターに値を追加する必要があります。パラメータは「@exp」であり、それに追加される値はユーザー入力によって決定されます。ユーザー入力を保存しますString exp;(この関数の大部分は他の誰かが書いたものではありません)。

SQl_Command.CommandText = "SELECT COUNT(*) As MyCount FROM members WHERE ([Primary Exp] = '@exp') AND ([Approved] = 'True') OR ([Approved] = 'True') AND ([Secondary Exp] = '@exp')";
SQl_Command.Parameters.Add("@exp", SqlDbType.NVarChar, 255);
SQl_Command.Parameters["@exp"].Value = exp;

テスト ケースの目的の結果は 16 ですが、このクエリは 0 を返します。クエリは SQL Server 2008 から実行すると機能し、次のようになります。

SELECT COUNT(*) As MyCount 
FROM members 
WHERE ([Primary Exp] = 'Risk Management') 
  AND ([Approved] = 'True') OR ([Approved] = 'True') 
  AND ([Secondary Exp] = 'Risk Management')

Response.Write(SQl_Command.CommandText);「リスク管理」を選択した場所を使用できるはずであり、パラメーター化されたクエリが出力されるはずです。

SELECT COUNT(*) As MyCount 
FROM members 
WHERE ([Primary Exp] = 'Risk Management') 
  AND ([Approved] = 'True') OR ([Approved] = 'True') 
  AND ([Secondary Exp] = 'Risk Management')`

ただし、そうではありません。[@exp一次評価] と [二次評価] を比較したい値であるかのように表示されます。あれは正しいですか?

これを行う方法は複数ありますが、一般的にはここの例に従っています

これは問題ではないと思いますが、これがクエリの使用方法です。

SQl_Reader = SQl_Command.ExecuteReader();
int numRows = 0;
while(SQl_Reader.Read()){
    numRows = Convert.ToInt32(SQl_Reader["MyCount"]);
}

それは私が見逃している単純なものだと確信していますが、私はそれを見ることができませんでした。

4

2 に答える 2