(解決済み: 下部を参照)
次のコード スニペットがあります。
Protected Sub SqlDataSource1_Inserted(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs)
Handles SqlDataSource1.Inserted
affected = CInt(DirectCast(e.Command.Parameters("@affected"), IDbDataParameter).Value)
newID = CInt(DirectCast(e.Command.Parameters("@newID"), IDbDataParameter).Value)
End Sub
@newID は、SQL 文字列で次のように定義されます。
"INSERT INTO x(a,b,c) VALUES (@a,@b,@c); SELECT @affected = @@rowcount, @newID = SCOPE_IDENTITY();
パラメータは、ASP.NET を使用して次のように定義されます。
奇妙なことに、これは 90% の確率で機能しますが、「'DBNull' 型から 'Integer' 型への変換は無効です」という InvalidCastException が時々スローされます。この値が null になる原因について何か考えはありますか? テーブルにトリガーを設定しておらず、クエリが実行しているのは、1 つのテーブルへの単純な挿入を実行することだけです。
編集:ここでの提案に基づいて、affected
パラメーターを追加しました。ブレークポイントを設定し、影響を受けました = 1 でしたが、それでも例外が発生しました。しかし、その後、SELECT @affected の前に SELECT @newID を使用していることに気付きました。順序を入れ替えたところ、@affected = 0 になりました。結局、insert ステートメントに問題があるようです。ご協力いただきありがとうございます!