【问题标题】:How to avoid exception in case if string returned from database is null or empty?如果从数据库返回的字符串为空或为空,如何避免异常?
【发布时间】:2015-03-20 16:56:59
【问题描述】:

我有一个业务规则需要将字符串转换为 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 没有通过验证条件并且实际上为空,我该怎么写?

我可以再尝试从数据库中检索它吗?有没有其他方法可以做到这一点?

谢谢

【问题讨论】:

  • 看看string.IsNullOrEmpty函数

标签: c# string null base64


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多