3

アプリケーション用にデータベースを準備するコードを書いています。コードには、テーブルを作成しているときにいくつかの繰り返しの SQL ステートメントがあり、いくつかのメソッドでそれらを非表示にしたい (現在のところ、主キーを作成し、テーブルの ID を自動インクリメントにするのは 2 つだけです)。ポストグル)。主キーの単純なケースでは、最初に次のような関数を作成しました。

public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
    conn.Execute(@"
ALTER TABLE ""@tblName""
    ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
    ", new { tblName = tblName,
             constrName = tblName + "_pkey",
             colName = colName } );
}

エラーと例外をいじくり回した後、最終的に、この方法でパラメーターを使用することは実際にはサポートされていないという結論に達したため、従来のstring.Format()呼び出しに切り替えましたが、すべてうまくいきました。

しかし、私は本当に満足していません。このパラメーターの使用方法は本当にサポートされていませんか? もしそうなら、これらのパラメータを安全に使用できる場所はどこですか? ストアド プロシージャ パラメータを使用できる場所など、SQL クエリの可変部分のみですか。

4

1 に答える 1

2

私の記憶が正しければ、Dapper はパラメーター化された IDbCommand を使用してクエリを実行します。

パラメータ化されたクエリは、単なる文字列置換操作です。

より具体的には、パラメーター化されたクエリでは、クエリにパラメーターを含めることができ、それらのパラメーターの値を送信すると、SQL Server がクエリのコンパイルとパラメーターの値の受け渡しを処理します。

必要な構文を使用してプレーンな ADO.NET でパラメーター化されたクエリを作成できない場合、Dapper.NET でもそれを行うことはできません。

于 2011-06-07T19:38:31.107 に答える