【问题标题】:System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'System.InvalidCastException:无法将“System.DBNull”类型的对象转换为“System.String”类型
【发布时间】:2016-08-30 22:42:22
【问题描述】:

我有这个代码

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

【问题讨论】:

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


【解决方案1】:

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

如果执行查询的结果实际上是NULL(您的SQL db 表列中的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

【讨论】:

  • 还是有同样的问题。谢谢。
  • @user300485 尝试测试System.DBNull 而不是null
  • 是的,知道了 System.DBNull.Value 需要使用.. 非常感谢你们。
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 2017-06-19
  • 2020-05-16
相关资源
最近更新 更多