"发生与网络相关或特定于实例的错误" - 但是对于哪个连接字符串?

时间:2014-09-10 08:13:30

标签: c# sqlclient

尝试开始调试我的应用程序时,我发现(非常常见)System.Data.SqlClient.SqlException关于"与网络相关或特定于实例的错误"显然发生了。

我已经明白这意味着我的连接字符串存在问题,但我的配置文件中有很多不同的连接字符串,用于不同的配置等,所以我&#39 ;我知道哪一个给我带来了麻烦。

当抛出此错误时,有没有办法找到正在使用的连接字符串?

3 个答案:

答案 0 :(得分:3)

不一定是连接字符串问题,但无法连接到数据源......例如。网络连接问题

1

最直接的做法是调试应用程序。抛出异常时,您可以轻松遍历调用堆栈,直到调用SqlConnection.Open,您将能够看到整个连接字符串。如果您直接使用System.Data.SqlClient提供商的课程

,那就是

2

如果您正在使用ORM工具,可能会稍微困难一点,您需要参考该特定工具的文档才能输出调试和/或跟踪信息

希望我能更具体,但步骤取决于您如何设置数据访问逻辑,因为它从一种方法到另一种方法的差异很大

实施例

我进入并打开了一个使用Fluent NHibernate的项目,故意拼写表名,故意在下面的实体映射中创建了一个错误...

internal class RiskLevelDOMap : ClassMap<RiskLevelDO>
{
    internal RiskLevelDOMap()
    {
        Id(x => x.Id);

        Map(x => x.MatrixId, "RiskMatrixId");
        Map(x => x.DisplayText).Length(256);
        Map(x => x.Description).Nullable().Length(2000);
        Map(x => x.BackgroundColor).Nullable().Length(64);
        Map(x => x.ForeColor).Nullable().Length(64);
        Map(x => x.DisplayInReports);
        Map(x => x.IsActive);

        Table("rm_RiskLevel1");
    }
}

运行调试器并查看下面附带的屏幕截图...纯文本中的连接字符串...

enter image description here

但是,值得注意的是,我确实有一个非常结构良好的数据访问实现,我在那里吐出了大量的调试信息

答案 1 :(得分:0)

在Debug菜单(Visual Studio)的例外对话框中,您可以启用调试器以专门停止此错误(System.Data.SqlClient.SqlException),然后您可以上调调用堆栈并查看正在使用哪个字符串二手...

答案 2 :(得分:0)

一种方法可能是记录ClientConnectionId。假设连接已建立,SqlConnectionSqlException都可以使用这些内容。

  • 打开连接后,请记录连接字符串以及连接的ClientConnectionId
  • 当您收到例外时,请记录ClientConnectionId
  • 要查找导致异常的DB对应的连接字符串,请在日志中搜索建立连接时记录的ClientConnectionId