C# System.InvalidCastException:无法强制转换类型为';System.DBNull';输入';System.String';

C# System.InvalidCastException:无法强制转换类型为';System.DBNull';输入';System.String';,c#,asp.net-mvc,c#-4.0,ssis,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 (r

我有这个密码

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行),
ExecuteScalar
返回
null
,如果尝试将其转换为字符串,则可能会出现null引用错误


如果执行查询的结果实际上是
NULL
(SQL db表列中的
NULL
值),ExecuteScalar将返回类型为
System.DBNull
的结果,如果尝试将其转换为字符串,则会出现此错误

在尝试强制转换(或对该对象执行任何其他操作)之前,请执行
null
检查


结果!=如果ExecuteScalar的类型为
System,则null
将返回
false
。DBNull

仍然存在相同的问题。谢谢。@user300485尝试测试
System。DBNull
而不是
null
。是的,需要使用System.DBNull.Value。。非常感谢大家。我想知道为什么它不能将System.DBNull转换为System.String,因为字符串可以为null。为什么它会抛出和异常,而不是将字符串设置为null?在这种情况下,C#设计师认为人们还会想要什么?
string returnUserId = string.Empty;
var result = objcmd1.ExecuteScalar();
if (result!= null)
{
   returnUserId = (string) result;
}