如果从数据库返回的字符串为 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 来说是不好的做法。你最好为大多数对数据库的调用创建一个新的连接对象,而不是重复使用相同的连接字符串。