如果从数据库返回的字符串为 null 或空,如何避免异常?
How to avoid exception in case if string returned from database is null or empty?
我有一个业务规则需要将字符串转换为 Base64。
执行存储过程的方法可能return一个有效字符串或空字符串,例如:
public static string GetReturnString()
{
...
try
{
con.Open();
myString = cmd.ExecuteScalar().ToString();
return myString;
}
catch{Exception ex)
{
InsertErrorInDB(....);
return null;
}
finally
{
con.Close();
cmd.Close();
}
}
然后,我有一个调用上面方法的方法:
public string GetCode()
{
string myString = GetReturnString();
ConvertToBase64String(myString); // this method will have an exception if myString is null
.....
}
如果我添加支票:
if(myString != null || myString.Length !=0)
{
ConvertToBase64String(myString);
}
,我不会报错,但是如何保证myString永远不会为null,让这段代码一直执行?
如果 myString 没有通过验证条件并且实际上为 null,我该怎么写?
我可以再尝试从数据库中检索它吗?还有其他方法可以实现吗?
谢谢
DBNull.ToString()
已经 returns String.Empty()
。您可以在异常处理程序中做同样的事情:
public static string GetReturnString()
{
...
try
{
con.Open();
return cmd.ExecuteScalar().ToString();
}
catch{Exception ex)
{
InsertErrorInDB(....);
return string.Empty;
}
finally
{
con.Close();
cmd.Close();
}
}
这至少简化了您的测试:
if(myString != string.Empty)
{
myString = ConvertToBase64String(myString);
}
另请注意,我必须分配回原件。如果不这样做,您将丢弃函数调用的结果。
根据所提供的内容,我能为您解答的问题已经差不多了。对于其余部分,我们需要更多的上下文,并且世界上有多少程序员就有多少种方法来处理这个问题。
虽然我在这里,但让我补充一点,重新使用相同的连接对象,就像您似乎对 con
变量所做的那样,对于 ADO.Net 来说是不好的做法。你最好为大多数对数据库的调用创建一个新的连接对象,而不是重复使用相同的连接字符串。
我有一个业务规则需要将字符串转换为 Base64。
执行存储过程的方法可能return一个有效字符串或空字符串,例如:
public static string GetReturnString()
{
...
try
{
con.Open();
myString = cmd.ExecuteScalar().ToString();
return myString;
}
catch{Exception ex)
{
InsertErrorInDB(....);
return null;
}
finally
{
con.Close();
cmd.Close();
}
}
然后,我有一个调用上面方法的方法:
public string GetCode()
{
string myString = GetReturnString();
ConvertToBase64String(myString); // this method will have an exception if myString is null
.....
}
如果我添加支票:
if(myString != null || myString.Length !=0)
{
ConvertToBase64String(myString);
}
,我不会报错,但是如何保证myString永远不会为null,让这段代码一直执行?
如果 myString 没有通过验证条件并且实际上为 null,我该怎么写?
我可以再尝试从数据库中检索它吗?还有其他方法可以实现吗?
谢谢
DBNull.ToString()
已经 returns String.Empty()
。您可以在异常处理程序中做同样的事情:
public static string GetReturnString()
{
...
try
{
con.Open();
return cmd.ExecuteScalar().ToString();
}
catch{Exception ex)
{
InsertErrorInDB(....);
return string.Empty;
}
finally
{
con.Close();
cmd.Close();
}
}
这至少简化了您的测试:
if(myString != string.Empty)
{
myString = ConvertToBase64String(myString);
}
另请注意,我必须分配回原件。如果不这样做,您将丢弃函数调用的结果。
根据所提供的内容,我能为您解答的问题已经差不多了。对于其余部分,我们需要更多的上下文,并且世界上有多少程序员就有多少种方法来处理这个问题。
虽然我在这里,但让我补充一点,重新使用相同的连接对象,就像您似乎对 con
变量所做的那样,对于 ADO.Net 来说是不好的做法。你最好为大多数对数据库的调用创建一个新的连接对象,而不是重复使用相同的连接字符串。