0

我有以下查询:

public static string GetCustomerName(string customerNo)
{
   string query = "query to get customer";
   var myConn= new MYConnection();
   using (SqlConnection con = new SqlConnection(myConn.MYConnectionString))
   {
       con.Open();
       SqlCommand cmd = new SqlCommand(query, con);
       cmd.Parameters.Add("@customerNo", SqlDbType.NVarChar).Value = customerNo;
       object result = cmd.ExecuteScalar();
       return result == DBNull.Value ? String.Empty : (string)result;
   }

}

我这样调用上面的方法:

string customerName = GetCustomerName(CustomerID);

if (customerName.Contains(Constants.Company.CompanyName))
{

    Additional Logic...
}

但是,如果我的方法没有返回客户名称,我会收到 Object Reference Null 错误。我认为 GetCustomer 方法会返回一个空字符串。

如果我将调用更改为将 CustomerName 更改为下面,它会完美运行。

string customerName = GetCustomerName(emailAndSTCodeInfo.CustomerID);
if (String.IsNullOrEmpty(customerName))
{
    customerName = "";
}
if (customerName.Contains(Constants.Chase.ACCOUNT_NAME))
{
    Additional Logic
}

所以,我的问题是,如果我的 GetCustomer 方法没有找到记录并返回 null,那么处理这个问题的正确方法是什么。我目前正在使用上面的工作代码,但它似乎是一个黑客或其他东西。

任何帮助将不胜感激。

4

2 回答 2

2

如果查询没有返回任何行,那么执行它ExecuteScalar会返回null,而不是DBNull.Value

因此,您的GetCustomerName方法需要检查null返回值以及DBNull.Value.

于 2013-04-30T18:01:25.567 回答
2

ExecuteScalar如果没有返回记录,则返回 null。

为了保证GetCustomerName永远不会返回 null,您可以将最后一行更改为

return Convert.ToString(result);

Convert.ToString(object)如果参数为 null 或 ,则返回空字符串DBNull.Value

于 2013-04-30T18:01:41.590 回答