(решено: см. Внизу)
У меня есть следующий фрагмент кода:
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% времени, но время от времени выдает InvalidCastException, говоря, что «Преобразование из типа« DBNull »в тип« Integer »недопустимо». Любые идеи о том, что может быть причиной того, что это значение будет нулевым? У меня не установлены триггеры в таблице, и единственное, что делает мой запрос, - это выполнение простой вставки в 1 таблицу.
Редактировать : На основании приведенных здесь предложений я добавил параметр affected
. Я установил точку останова и повлиял на = 1, но все равно получил исключение. Однако потом я понял, что у меня был SELECT @newID до SELECT @affect. Я изменил порядок, и теперь @affered = 0. Так что, похоже, проблема с моим оператором вставки в конце концов. Спасибо за вашу помощь!