【问题标题】:After a non null return from a SqlCommand.ExecuteScalar() call, do I need to check for empty string after casting to string?从 SqlCommand.ExecuteScalar() 调用返回非 null 后,是否需要在转换为字符串后检查空字符串?
【发布时间】:2016-03-15 04:40:28
【问题描述】:
object check;
string q = "query details";

using (SqlCommand cmd = new SqlCommand(q, sc))
{
    try
    {
        sc.Open();
        check = cmd.ExecuteScalar();
        sc.Close();
    }
    catch (Exception e)
    {
        // Alert user, continue execution;
        CloseConnectionIfOpen(sc);
        return s;
    }

    if (check == null)
    {
        // Alert user, continue execution;
        return s;
    } 
    else
    {
        stringvariable = check.ToString();
    }
}

我现在是否需要检查 stringvariable 是否为空字符串,或者我可以保证它至少包含 1 个字符?

如果我可以保证字符串不为空,那么继续尝试从ExecuteScalar() 转换返回并捕获异常是否更有意义?

【问题讨论】:

  • 一个空字符串 != null 字符串,所以你真的应该检查它里面有什么东西。您可以使用string.IsNullOrEmpty() 来检查是否是其中一个。
  • 我认为这会起作用,除了要达到那一步我必须尝试将 null 对象转换为字符串,并且在达到我可以调用 IsNullOrEmpty() 的点之前抛出异常.你的第一句话证实了我的想法。
  • 使用充满了我无法触及的信息的遗留数据库在截止日期前工作。我真的不想花我公司的时间来启动一个新的控制台程序,创建一个虚拟数据库,输入一个带有空字符串的行,然后运行程序来快速提问。我现在可以做安全的事情,检查对象,然后检查字符串,这就是我在等待看是否有人有任何输入时正在做的事情。
  • 确定来自ExecuteScalar() 的返回值是NOT NULL - 仅此而已。 YES - 如果它是一个字符串,它可以是一个空字符串 - 这也是 not null

标签: c# sql .net sql-server exception


【解决方案1】:

来自: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.80).aspx

返回值
结果集中第一行的第一列,或为空 如果结果集为空,则引用。

因此,无需检查 stringvariable 中的空字符串。

关于你的第二个问题。你不应该期待一个例外。异常是意料之外的事情。如果您知道您的 SQL 查询可能会失败,那么您应该主动并明确地测试 check != null。

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多