在单元测试中调试以下方法时,我收到以下错误
你调用的对象是空的
当击中以下行时
result = (int)validateDatabase.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
方法是
public static Boolean Validate(string argument1, string argument2)
{
int result = -1;
using (var connection = new SqlConnection("connection string"))
{
SqlCommand validateDatabase = new SqlCommand("PROCEDURE NAME", connection);
validateDatabase.CommandType = System.Data.CommandType.StoredProcedure;
validateDatabase.Parameters.Add("@PARAMETER1", System.Data.SqlDbType.NVarChar).Value = argument1;
validateDatabase.Parameters.Add("@PARAMETER2", System.Data.SqlDbType.NVarChar).Value = argument2;
try
{
connection.Open();
result = (int)validateDatabase.ExecuteScalar();
}
catch (SqlException exception) { Trace.WriteLine("exception.Message); }
finally { connection.Close(); }
}
return (int)result == 0 ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 11
ExecuteScalar如果根据MSDN结果集为null,则返回null.这意味着您的演员表无效
有关文档SqlCommand.ExecuteScalar,请参见此处
如果你希望该转换工作,将其更改为可空 int
result = (int?)validateDatabase.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
我刚刚遇到了类似的问题.我所做的是从表中的特定记录中选择一个int列,但它发生在该列的值为0.执行以下操作导致异常"对象引用未设置为对象的实例":
int i = (int)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
我的解决方案是将上面的代码更改为:
int i = 0;
object a = cmd.ExecuteScalar();
if (a != null)
i = (int)a;
Run Code Online (Sandbox Code Playgroud)
这避免了例外.