(已解决:见底部)
我有以下代码片段:
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
在 SQL 字符串中,@newID 的定义如下:
"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 @affected 之前有 SELECT @newID。我切换了顺序,现在@affected = 0。所以这似乎是我的插入语句的问题。谢谢你的帮助!