System.InvalidCastException:无法转换类型' System.DBNull'的对象输入' System.String'

时间:2016-08-30 22:42:22

标签: c# asp.net-mvc c#-4.0 ssis

我有这段代码

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()

1 个答案:

答案 0 :(得分:2)

如果执行查询的结果为空(0行),ExecuteScalar返回null,如果尝试将其强制转换为字符串,则可能会出现空引用错误!

如果执行查询的结果实际上是{db}表列中的NULLNUll值),则ExecuteScalar将返回类型System.DBNull的结果,如果尝试强制转换它串起来你会得到这个错误。

在尝试施放(或对该物体做任何其他事情)之前,请进行null检查。

string returnUserId = string.Empty;
var result = objcmd1.ExecuteScalar();
if (result!= null)
{
   returnUserId = (string) result;
}

result!= null将返回false如果结果来自ExecuteScalar,则类型为System.DBNull