【问题标题】:SqlException: can I get the database name?SqlException:我可以获得数据库名称吗?
【发布时间】:2017-05-09 08:03:17
【问题描述】:

我有一个异常日志记录服务,被各种系统使用。它被赋予了一个例外,它从中提取和存储有用的信息。

如果异常是 SqlException,则它会提取额外的详细信息,例如“服务器”属性(即 SQL Server 实例)以及存储过程名称和行,以帮助诊断。

但我在其中的任何地方都找不到“数据库名称”,这将有助于明确错误发生的确切位置。谁能告诉我它在哪里?

我知道 SQL 并非特定于 SQL Server;但是SqlException 是特定于 SQL Server 的,所以它应该在某个地方..

附:以某种方式更改每条 SQL 以进行不同的抛出不是一种选择。也没有更改异常来源的 C# 代码。我只需要处理内存中的SqlException 对象。

【问题讨论】:

  • 我知道 SQLClient 并不特定于 MS-SQL,嗯,它是...
  • @PatrickHofman 感谢您澄清这一点......这让我更加希望它应该在那里。我已经相应地编辑了我的帖子。
  • 您在谈论默认的 SQLException。。查找数据库名称的其他选项是根据您当前工作的数据库连接自定义错误异常。(代码隐藏)
  • 对不起,@reds,我在问题中明确表示,不能选择更改异常来源的 C# 代码。
  • @JenishRabadiya “服务器”为您提供 SQL 服务器实例(正如我在问题中提到的那样),而不是数据库名称。

标签: c# sql-server exception-handling


【解决方案1】:

默认的SQLException 没有数据库名称的属性

它确实有一个SQLErrors 的集合,我想这是您从中获取存储过程等的地方。这确实包含有关错误的更多信息,但同样不存储数据库名称。

您可以查看自定义错误异常:

例如

public class MySqlException : DbException
{
    public string Database { get; set; }
} 

SqlConnection conn;
try
{

}
catch (SqlException ex)
{
    throw new MySqlException() {Database = conn.Database};
}

【讨论】:

  • 对不起,@Scrobi,我在问题中明确表示,不能更改异常来源的 C# 代码。
  • 很抱歉错过了问题末尾的 PS。
猜你喜欢
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多