65

type の単一の列を持つテーブルであるテーブル値パラメーターを受け取るストアド プロシージャを作成しましたint。ID のリストをストア プロシージャに単純に渡し、ストアド プロシージャがデータを処理できるようにするという考え方です。ただし、渡すデータがない場合、問題が発生します (データがあると正しく動作します)。を に変換し、List<int>それIEnumerable<SqlDataRecord>をストアド プロシージャのテーブル値パラメータにバインドしています。空の をバインドしようとしList<SqlDataRecord>ましたが、エラーが発生しました:

System.ArgumentException: SqlDataRecord 列挙にレコードがありません。行のないテーブル値パラメーターを送信するには、代わりに値に null 参照を使用します。

次に、null値をバインドしようとしました(上記のメッセージが得られたものだと思いました)が、別のエラーメッセージが表示されるだけでした

System.NotSupportedException: パラメータ '@MainItemIdList' の DBNull 値はサポートされていません。テーブル値パラメーターを DBNull にすることはできません。

ストアド プロシージャの宣言で、テーブル値パラメーターを null 許容として宣言できるようには見えません。空のリストをテーブル値パラメータにバインドする正しい方法は何ですか?

4

4 に答える 4

92

秘訣は、パラメータをまったく渡さないことです。テーブル値パラメーターのデフォルト値は空のテーブルです。

例外メッセージが役に立たないのは残念です。

于 2011-05-24T08:52:59.467 に答える