Dapper:何にでもパラメータを使用できますか?

dapper npgsql parameter-passing

質問

私は自分のアプリケーションのためにデータベースを準備するいくつかのコードを書いています。コードの中には、テーブルを作成するときにいくつかの反復的なSQL文があります。いくつかの方法でそれらを隠したいのです(主キーを作成してテーブルのidを自動インクリメントポストグル)。プライマリキーの単純なケースでは、まず次のような関数を書いた:

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クエリの可変部分のみ?

受け入れられた回答

私が正しく覚えていれば、Dapperはパラメータ化されたIDbCommandを使ってクエリを実行します。

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

具体的には、パラメータ化されたクエリを使用すると、クエリにパラメータを持ち、それらのパラメータの値を送信し、SQL Serverがクエリをコンパイルしてパラメータの値を渡します。

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



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ