0

私のコード:

    SqlCommand command = new SqlCommand("SELECT min(Score) FROM MenAthletics WHERE [(@sportevent)] < (@result);", connect);
        command.Parameters.AddWithValue("@sportevent", sportEvent);
        command.Parameters.AddWithValue("@result", result);

@result は正常に動作します (double 変数のみ) @sportevent は動作しません (エラー: 列名が無効です) (sportEvent は文字列です)

文字列を指定して列を選択するにはどうすればよいですか?

4

4 に答える 4

1

列名をパラメーターとして使用することはできません。代わりに、次の方法でクエリを作成することを検討してください。

SqlCommand command = 
      new SqlCommand(
         String.Format(@"SELECT min(Score) 
                         FROM MenAthletics WHERE [{0}] < @result;",     
                         sportEvent), 
                      connect);
command.Parameters.AddWithValue("@result", result);

この種の sql は「動的 sql」と呼ばれ、その場でクエリを作成する効果的な方法となります。

ただし、落とし穴があります。ユーザー入力を検証するだけでなく、データベースに接続しているユーザーが、実行したいアクションを実行するのに十分な権限しか持っていないことも確認してください。

洗練されていませんが、ストアド プロシージャに直接配置できるもう 1 つの方法は、CASE ステートメントを使用することです。

例えば:

SELECT min(Score)
FROM MenAthletics 
WHERE 
    CASE 
      WHEN @sportEvent = 'SomeColumnName' THEN SomeColumnName
      WHEN @sportEvent = 'SomeColumnName2' THEN SomeColumnName2
    END < @result;

これは、大きなテーブルを作成して維持するのに非常に面倒です。利点は、クエリが動的ではないことです。

于 2013-05-30T12:08:15.843 に答える