我有这段代码
SqlCommand objcmd1 = new SqlCommand("select r.login_Id from XYZ where a.logonid = @uId", myADONETConnection);
objcmd1.Parameters.Add("@uId", SqlDbType.VarChar).Value = dr[0].ToString();
returnUserId = (string)objcmd1.ExecuteScalar();
if (returnUserId != null)
{
adid = returnUserId.ToString();
}
else
{
adid = "";
}
我收到此错误。我知道我将NULL值作为返回值。我如何解决此问题?有人可以帮帮我吗?
System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.InvalidCastException:无法转换类型' System.DBNull'的对象输入' System.String'。
在ST_a9849ab5e79d483093f9802cd30cb2e7.csproj.ScriptMain.Main()
答案 0 :(得分:2)
如果执行查询的结果为空(0行),ExecuteScalar
返回null
,如果尝试将其强制转换为字符串,则可能会出现空引用错误!
如果执行查询的结果实际上是{db}表列中的NULL
(NUll
值),则ExecuteScalar将返回类型System.DBNull
的结果,如果尝试强制转换它串起来你会得到这个错误。
在尝试施放(或对该物体做任何其他事情)之前,请进行null
检查。
string returnUserId = string.Empty;
var result = objcmd1.ExecuteScalar();
if (result!= null)
{
returnUserId = (string) result;
}
result!= null
将返回false
如果结果来自ExecuteScalar,则类型为System.DBNull