(постановило: см снизу)Зачем было @@ IDENTITY или SCOPE_IDENTITY() быть DBNull?
У меня есть следующий фрагмент кода:
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 @affected. Я переключил порядок, и теперь @affected = 0. Так что все-таки проблема с моей инструкцией insert. Спасибо за вашу помощь!
Существуют ли какие-либо триггеры на целевой таблице? – cmsjr
Вам нужно опубликовать весь запрос. – Portman
Когда возникла ошибка, была ли строка вставлена в таблицу? –