0

我想在执行错误查询时从 SQL Server 获取消息编号和严重性级别信息。

例如,当用户尝试删除被另一条记录引用的行,并且级联关系为“无操作”时,我希望应用程序能够检查错误消息 547(“DELETE 语句与REFERENCE 约束...") 并向用户返回用户友好和本地化的消息。

直接在 SQL Server 上运行此类查询时,将打印以下消息:

Msg 547, Level 16, State 0, Line 1
<Error message...>

在 Asp.Net 应用程序中,此信息是否在事件处理程序参数或其他地方可用?

另外,我想没有人知道我在哪里可以找到 SQL Server 消息编号的明确参考?

4

3 回答 3

5

当然 - 检查抛出的SqlException是否在 SQL Server 上出现问题。

它包含SqlError元素的集合,其中包含一堆属性,包括

  • Class 获取从 SQL Server 返回的错误的严重级别。
  • LineNumber 获取 Transact-SQL 命令批处理或存储过程中包含错误的行号。
  • Message获取描述错误的文本。
  • Number 获取标识错误类型的数字。
  • Procedure 获取生成错误的存储过程或远程过程调用 (RPC) 的名称。
  • Server 获取生成错误的 SQL Server 实例的名称。
  • Source 获取生成错误的提供程序的名称。
  • State 从 SQL Server 获取表示错误、警告或“未找到数据”消息的数字错误代码。
于 2010-06-09T16:17:59.470 回答
1

试试这个看看所有的消息是什么

SELECT *
FROM master.dbo.sysmessages
于 2010-06-09T16:15:11.123 回答
1

SQL Server 错误消息位于master.dbo.sysmessages

在 ASP.NET 中,如果您将异常捕获为 SQLException,则错误号和消息将可用。

我认为遍历 SQL 错误是一种好习惯,因为可能有不止一个

(未经测试)

try
{
// Do some stuff here
}
catch (SQLException sqlex)
{
foreach (SqlError error in sqlex.Errors)
{
Console.WriteLine(error.Number.ToString());
Console.WriteLine(error.Message.ToString());
}
}
catch (Exception ex)
{
}
于 2010-06-09T16:20:22.170 回答