0

SqlCommand を作成してストアド プロシージャを実行するクエリ パーサーを作成しました。ストアド プロシージャのクエリには、次のようなさまざまな形式があります。

exec dbo.sp_StoredProcedureName 1599800

この場合、次のように SqlParameter を作成します。

var param = new SqlParameter() { Value = paramValue };

'@Parameter1' はプロシージャ sp_StoredProcedureName のパラメーターではないというエラーが表示されます。

標準クエリとして実行せずにこれを行う方法はありますか? 一貫性を保ち、可能であれば SqlCommand を StoredProcedure タイプとして構築したいと思います。

ストアド プロシージャのパラメータ名を最初に反映できるのではないかと考えていましたが、別のアプローチがあるかどうか疑問に思っていました。

4

2 に答える 2

1

SQLParameter名前を設定しないコンストラクターがありますが、プロパティSQLParameterを設定せずに実際に使用することはできません。ParameterName

MSDNから(私の強調):

ParameterNameは、@paramnameの形式で指定されます。パラメータに依存するSqlCommandを実行する前に、ParameterNameを設定する必要があります。

SP内では、パラメーター名前が付けられます。クエリの定義を調べて見つけてください。

名前が何になるかが事前にわからない場合は、sys.parametersテーブルにクエリを実行して、特定のストアドプロシージャが使用するパラメータを確認してください。

とにかくどのパラメータがどれであるかを指定してストアドプロシージャを呼び出すことをお勧めします(特に複数のパラメータがある場合)。

exec dbo.sp_StoredProcedureName @myParam = 1599800

パラメータの名前がわかったら、C#から名前で追加できます。

cmd.Parameters.AddWithValue("@myParam", 1599800);
于 2012-10-31T16:52:55.180 に答える
0

質問で指定したタイプのコマンドを作成すると、このコマンドは次のスニペットにいくらか似た動的SQLクエリに変換されます。

EXECUTE sp_executesql 'exec dbo.sp_storedprocName @FirstParam=value, ...'

ここで、@ FirstNameは、SqlCommandオブジェクトに追加するときに指定するパラメーターの名前です。このタイプのクエリは、パラメータの名前を指定せずに作成することはできません。

SQLServerプロファイラーを使用してADO.NETによって生成されるクエリを表示できます。SQL Serverプロファイラーを開いて、クエリがどのように解釈されるかを確認することをお勧めします。これは、ADO.NETでクエリを作成するときによくある間違いを回避するのに役立ちます。

于 2012-10-31T17:22:20.567 に答える