私が理解している次のコードは、パラメーター化されたステートメントを作成し、そのパラメーターに値を追加する必要があります。パラメータは「@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"]);
}
それは私が見逃している単純なものだと確信していますが、私はそれを見ることができませんでした。