SqlCommand objsql = new SqlCommand();
.
.
objsql.Parameters.AddWithValue("@Param1", DBNull.Value);
.
.
.
我收到了一个特殊的错误:
“对象引用未设置为对象的实例”
如果我这样做:
objsql.Parameters.AddWithValue("@PaymentMethodID", null);
我收到以下错误: 参数化查询'(@SupplierQuoteID int,@ PaymentMethodID nvarchar(4000),@ DueDate d'需要参数'@PaymentMethodID',这是未提供的。“}
PaymentMethodID是表中的一列,取空值。
此错误发生在此处:
string valHolder = null;
valHolder = objSqlCommand.ExecuteScalar().ToString();
singleValue = Convert.ToInt32(valHolder);
一旦objSqlCommand.ExecuteScalar()。ToString();执行时,抛出错误。 记录被插入到表中但是ExecuteScalar()不会返回任何记录 值!它应该返回当前最新的自动递增的pk,但它不会。
注意:执行此行时会抛出我上面提到的所有错误
valHolder = objSqlCommand.ExecuteScalar().ToString();
以下是完整错误:
System.NullReferenceException was caught
Message="Object reference not set to an instance of an object."
Source="........"
StackTrace:
at ......DAL.ExecuteSQL(SqlCommand sqlCmd, String typeOfExecution) in C:\Users\....\Desktop\........\DAL.cs:line 136
InnerException:
我该怎么办?
答案 0 :(得分:6)
不要直接在ExecuteScalar()上调用ToString()。首先调用objSqlCommand.ExecuteScalar(),然后测试以查看该变量是否为空。这很可能就是发生的事情。
如果您正在调用存储过程,请确保Select SCOPE_IDENTITY()
是您的sproc的最后一行,否则将不会返回最后一个自动编号。