我有一个业务规则,其中字符串需要转换为Base64。
执行存储过程的方法可能返回有效的字符串或空字符串,例如:
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,我可以写什么?
我可以再次尝试从数据库中检索它吗?还有其他方法可以实现吗?
谢谢
答案 0 :(得分:4)
DBNull.ToString()
已经返回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来说是不好的做法。对于大多数每次调用数据库而言,最好为每次调用创建一个新的连接对象,而只是重复使用相同的连接字符串。