【问题标题】:Trap error details if a sql connection fails如果 sql 连接失败,则捕获错误详细信息
【发布时间】:2009-08-26 20:03:35
【问题描述】:

我正在寻找一种更好的方法来捕获我在 connection.open 上的 sql 连接的错误,以便我可以更好地记录错误并确定我的应用程序中出现错误的位置。

我正在使用 try catch 并记录捕获的异常,但我真正想要的是知道哪个连接失败了。我的应用程序正在迭代 70 台服务器并为另一个数据库聚合数据。

【问题讨论】:

  • 发布你调用connection.open的函数,我相信你会得到很好的回应。

标签: .net sql exception-handling


【解决方案1】:

如果您捕获 SqlException 异常类型,它应该具有特定于连接尝试的信息。 .Number 之类的属性将返回 SQL 错误编号,这些编号应该会为您提供有关连接失败原因的一些信息。

【讨论】:

    【解决方案2】:

    只是在黑暗中拍摄。如果您捕获 SqlException,您需要遍历其 Errors 集合。集合中的 SqlError 对象有一些额外的属性,包括 SqlError.Server,这正是您所需要的。

    获取 SQL 实例的名称 产生错误的服务器。

    单个 SqlException 可以有更多 SqlError 对象,因为集合会重新运行命令(sql 批处理)生成的所有错误。集合中的第一个 SqlError 与 SqlExpcetion 本身中的信息相对应(在错误消息中),因此在某种意义上它是重复的。在我的错误报告中,我倾向于完全忽略 SqlException 信息,并始终在 SqlError 信息之后进行报告,因为它更完整。

    【讨论】:

      【解决方案3】:
      {
          ...
          foreach(var connectionString in connectionStrings)
          {
              try
              {
                  using (var cnn = new SqlConnection())
                  {
                      cnn.Open();
                  }
              }
              catch (SqlException)
              {
                  Log(string.Format("Failed to open connection '{0}'.", connectionString));
              }
          }
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2011-03-07
        • 2013-09-24
        • 2022-07-27
        • 2018-10-13
        相关资源
        最近更新 更多