一尘不染

无法将类型为“ System.DBNull”的对象转换为类型为“ System.String”的对象

c#

我在应用程序中遇到上述错误。这是原始代码

public string GetCustomerNumber(Guid id)
{
     string accountNumber = 
          (string)DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidmyApp, 
                          CommandType.StoredProcedure, 
                          "GetCustomerNumber", 
                          new SqlParameter("@id", id));
     return accountNumber.ToString();
 }

我换成

public string GetCustomerNumber(Guid id)
{
   object accountNumber =  
          (object)DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidCRM, 
                                CommandType.StoredProcedure, 
                                "spx_GetCustomerNumber", 
                                new SqlParameter("@id", id));
    if (accountNumber is System.DBNull)
    {
       return string.Empty;
    }
    else
    {
       return accountNumber.ToString();
    }
}

有没有更好的办法解决这个问题?


阅读 612

收藏
2020-05-19

共1个答案

一尘不染

可以使用较短的形式:

return (accountNumber == DBNull.Value) ? string.Empty : accountNumber.ToString()

编辑:尚未注意ExecuteScalar。如果返回结果中不存在该字段,则确实返回null。因此改用:

return (accountNumber == null) ? string.Empty : accountNumber.ToString()
2020-05-19