我有以下查询:
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,那么处理这个问题的正确方法是什么。我目前正在使用上面的工作代码,但它似乎是一个黑客或其他东西。
非常感谢任何帮助。
答案 0 :(得分:2)
如果查询未返回任何行,则使用ExecuteScalar
执行该操作将返回null
,而不是DBNull.Value
。
因此,您的GetCustomerName
方法需要检查null
返回值以及DBNull.Value
。
答案 1 :(得分:2)
ExecuteScalar
将返回null。
为了保证GetCustomerName
永远不会返回null,您可以将最后一行更改为
return Convert.ToString(result);
如果参数为null或Convert.ToString(object)
, DBNull.Value
将返回空字符串。