繁体   English   中英

是否有可能抛出 SqlException 并且属性 Number == 0?

[英]Is it possible that SqlException is thrown and property Number == 0?

尝试执行 sql 过程时是否会抛出 SqlException 并且属性 Number 为 0?

具体情况:域控制器不可用/无响应,没有与sql server进行真正的通信。

不, SqlException.Number应该不可能为 0,除了以下情况:

  • 只读路由失败
  • 服务器发生严重错误处理查询
  • 解析结果时处理取消
  • 未能创建用户实例

假设您没有使用 SQL Server 2016 的只读路由,那么这些情况都不适用于您描述的场景。

其余情况要么是来自sysmessages的非零数字,要么是 Win32 错误代码(由于 0 == ERROR_SUCCESS ,也永远不会为零)。

在实践中,您会看到类似“无法创建 SSPI 上下文”、“向服务器发送请求时发生传输级错误”或“远程主机强行关闭现有连接”之类的内容,那些也有非零的 Win32 错误代码。

参考: https : //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.number(v=vs.110).aspx

可能值得注意的是, SqlException.Number是其Errors数组中第一个条目的Number属性的同义词,并且该数组可能包含多个项目。

回答我自己的问题。 对的,这是可能的。 我们添加了额外的代码来捕获:

catch (SqlException ex)
{
    for (int i = 0; i < ex.Errors.Count; i++)
    {
        this.logger.Error("Index #" + i + "\n" +
        "Message: " + ex.Errors[i].Message + "\n" +
        "Error Number: " + ex.Errors[i].Number + "\n" +
        "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
        "Source: " + ex.Errors[i].Source + "\n" +
        "Procedure: " + ex.Errors[i].Procedure + "\n");
    }                       

    if (ex.Number == 0)
    {
        this.logger.Warn("Exception was caught but ex.Number == 0! Changing to -69.");
        oResults.Add("_ExitCode", "-69");
    }
}   

这是今天记录的。

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #0
Message: A severe error occurred on the current command.  The results, if any, should be discarded.
Error Number: 0
LineNumber: 0
Source: .Net SqlClient Data Provider
Procedure: 

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #1
Message: A severe error occurred on the current command.  The results, if any, should be discarded.
Error Number: 0
LineNumber: 0
Source: .Net SqlClient Data Provider
Procedure: 

2017-01-17 08:05:08,283 [r074008903] WARN  ProcessLogger Exception was caught but ex.Number == 0! Changing to -69.

因为在其他地方 _ExitCode 用于确定在这种特定情况下有什么问题,我们有错误的信息。

有可能的。

尝试连接在 ubuntu 容器内启动的 SQL 时,我收到 0。 根据这个: https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors?view=sql-server-ver15是无证的,可能,是一个错误。

下面是我的情况,例如: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM