Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 从SQL Server 2000错误中检索错误文本_Asp.net_Sql Server_Error Handling - Fatal编程技术网

Asp.net 从SQL Server 2000错误中检索错误文本

Asp.net 从SQL Server 2000错误中检索错误文本,asp.net,sql-server,error-handling,Asp.net,Sql Server,Error Handling,我需要帮助记录SQL Server 2000中T-SQL的错误。我们需要记录捕获到的错误,但在获取与坐在SQLServerManagementStudio前面相同的信息时遇到了困难 我可以在没有任何参数替换的情况下获得消息,如下所示: SELECT MSG.description from master.dbo.sysmessages MSG INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid WHERE MSG.er

我需要帮助记录SQL Server 2000中T-SQL的错误。我们需要记录捕获到的错误,但在获取与坐在SQLServerManagementStudio前面相同的信息时遇到了困难

我可以在没有任何参数替换的情况下获得消息,如下所示:

SELECT MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@err AND LANG.langid=@@LANGID
RAISERROR ( { msg_id | msg_str } { , severity , state } 
    [ , argument [ ,...n ] ] ) 
    [ WITH option [ ,...n ] ] 
但是我没有找到任何方法来找出错误参数。我想看看:

表MYTABLE7上的约束冲突MYCONSTRAINT2

不是

表%s上的约束冲突%s


谷歌只发现了使用DBCC OUTPUTBUFFER的奇特方案,这些方案需要管理员访问权限,不适用于生产代码。如何使用参数替换获得错误消息?

是否有可能很快升级到SQL2005?如果是这样,您可能会利用他们的TRY/CATCH模型来更轻松地完成您要做的事情


catch中暴露的变量可以为您提供抛出错误的对象、行号、错误消息、严重性等。从那里,您可以记录它、发送电子邮件等。

您有可能很快升级到SQL2005吗?如果是这样,您可能会利用他们的TRY/CATCH模型来更轻松地完成您要做的事情


catch中公开的变量可以为您提供抛出错误的对象、行号、错误消息、严重性等。从那里,您可以记录错误、发送电子邮件等。

在.Net中,从sql server检索错误消息(以及从print或raiserror输出的任何内容)非常简单,只需在SqlConnection上设置一个属性即可(.FireInfoMessageEventOnUserErrors=True)并处理连接的InfoMessage事件。由.Net接收的数据与您在SQL Server Management Studio结果网格的Messages窗口中获得的数据匹配

所有的代码都在处理事件的函数中,您可以将其抽象,以便所有连接都指向同一个方法,这样,在创建新连接以设置属性和事件时,除了两行代码之外,应用程序的其余部分就没有什么可更改的了(你已经把它抽象了,所以你只需要在一个地方做,对吗?)

这是我认为的一个链接。


在某些情况下,即使发生错误,SQL Server仍将继续处理。请参阅上一链接中标记的标题。

在.Net中,从SQL Server检索错误消息(以及从print或raiserror输出的任何内容)非常简单,只需在SqlConnection上设置一个属性即可(.FireInfoMessageEventOnUserErrors=True)和处理连接的InfoMessage事件。由.Net接收的数据与您在SQLServerManagementStudio结果网格的Messages窗口中获得的数据相匹配

所有的代码都在处理事件的函数中,您可以将其抽象,以便所有连接都指向同一个方法,这样,在创建新连接以设置属性和事件时,除了两行代码之外,应用程序的其余部分就没有什么可更改的了(你已经把它抽象了,所以你只需要在一个地方做,对吗?)

这是我认为的一个链接。


在某些情况下,即使发生错误,SQL Server仍将继续处理。请参阅上一链接中标记的标题。

在联机丛书中查找错误(已描述)

您会发现语法如下所示:

SELECT MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@err AND LANG.langid=@@LANGID
RAISERROR ( { msg_id | msg_str } { , severity , state } 
    [ , argument [ ,...n ] ] ) 
    [ WITH option [ ,...n ] ] 
错误参数如下所示:

d or I Signed integer 
o Unsigned octal 
p Pointer 
s String 
u Unsigned integer 
x or X Unsigned hexadecimal 
VB以后的任何语言都有能力捕捉这些信息,并让您采取适当的行动


Dave J

在线查册查找错误(已描述)

您会发现语法如下所示:

SELECT MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@err AND LANG.langid=@@LANGID
RAISERROR ( { msg_id | msg_str } { , severity , state } 
    [ , argument [ ,...n ] ] ) 
    [ WITH option [ ,...n ] ] 
错误参数如下所示:

d or I Signed integer 
o Unsigned octal 
p Pointer 
s String 
u Unsigned integer 
x or X Unsigned hexadecimal 
VB以后的任何语言都有能力捕捉这些信息,并让您采取适当的行动

Dave J

(它也存在于SQL Server 2000中)允许您从上面的sysmessages模板将消息构建为最终格式

但是,RAISERROR命令(这几乎是数据库引擎本身在发生错误时内部调用的命令)已经发送完成的文本,这些文本可以捕获并记录在客户端中。SSMS是客户端,不会生成自己的消息:所有消息都来自数据库引擎

但是,我猜想您希望使用T-SQL记录T-SQL错误。坦率地说,您不能在SQL Server 2000上记录。太多的错误是批处理和范围中止,无法可靠地记录任何内容

您必须在SQL Server 2005上才能使用TRY/CATCH/ERROR_MESSAGE,或者在客户机中设置陷阱,然后使用类似于log4net的东西重新登录到SQL Server。

(它也存在于SQL Server 2000中)允许您从上述系统消息模板将消息构建为最终格式

但是,RAISERROR命令(这几乎是数据库引擎本身在发生错误时内部调用的命令)已经发送完成的文本,这些文本可以捕获并记录在客户端中。SSMS是客户端,不会生成自己的消息:所有消息都来自数据库引擎

但是,我猜想您希望使用T-SQL记录T-SQL错误。坦率地说,您不能在SQL Server 2000上记录。太多的错误是批处理和范围中止,无法可靠地记录任何内容


您必须在SQL Server 2005上才能使用TRY/CATCH/ERROR_消息,或者在客户端设置陷阱,然后使用类似log4net的东西重新登录SQL Server。

我希望他们升级到2005!这是我的第一选择,但不在我的控制范围内。我希望他们升级到2005!这是我的第一选择,但不在我的控制范围内。客户端系统在异常情况下,错误消息会显示出来吗?在任何情况下,我仍然希望从TSQL 1中这样做,这将是应用程序重构错误处理的一个主要返工。和2,在程序中间有一个错误需要记录,但错误是不存在的。