1

私は現在ODBC、プロシージャ名を文字列として、キーと値のセットを辞書として必要とする関数を作成することにより、ストアド プロシージャの呼び出しを抽象化しようとしています。このため、私は文字列を作成する必要がODBC Commandあります..ええ、ばかげています。

CALL myProcedure(?, ?, ?, ?)

次に、ODBC コマンド オブジェクトを使用します。

odbcCommand.Parameters.AddWithValue("key", "param");

パラメータを追加するために、簡単にforeach. または、LINQ スタイルのSelect. しかしCALL、疑問符を付けて -string を作成する必要もあります。ここでは、このようなことが起こらないように注意する必要があります。

CALL myProcedure(?, ?, ?, )

そのため、パラメーターを追加するために辞書を 1 回ループし、キーと値を文字列 ( String.Join) に結合するために 2 回目をループするFOR必要がありますKeyValuePair。文字列の末尾に誤ってカンマが付くのを防ぎます。

CALL myProcedure「 」または次のようなものを宣言できる方法はありませんか

odbcCommand.CommandType = CommandTypes.StoredProcedure;
odbcCommand.ProcedureName = "myProcedure";
[LOOP]
     - add Params damn comfortable
[/LOOP]

あることを願っています..ナンセンスのために必要な余分なステップを減らすのに役立ちます!

ありがとう

4

1 に答える 1

1

パラメータを追加したら、これを使用します。

int paramCount = odbcCommand.Parameters.Count();
string[] placeholders = Enumerable.Repeat("?", paramCount).ToArray();
string callParams = String.Join(", ", placeholders);

これにより、CALL-string で参照される末尾のコンマを避けるように注意する必要がなくなります。(これは、プレースホルダーを削除するというあなたの質問に完全には答えていないことを認識しています。)

于 2013-10-31T20:43:43.090 に答える