SqlException错误代码

时间:2012-05-10 09:43:06

标签: database sqlexception error-code

我有一个问题,这不是问题。 我的数据库有一些限制,作为唯一名称(存储必须唯一的名称的列) 插入或更新时,db会验证我们是否没有覆盖某个名称,如果是,则返回一个可转换为SqlException的错误,代码为2627

我的问题是......如果存在某些表格或某些我可以咨询的内容,以便向最终用户表明该怎么做?

在这种情况下..存在具有相同名称的用户....

3 个答案:

答案 0 :(得分:2)

我想,你应该看一下SqlExceptions Errors property并查看errors number,它应该指向master.dbo.sysmessages表中的一条消息。

答案 1 :(得分:1)

不要假设特定的错误代码总是指同一个问题。

select * from master.dbo.sysmessages where description like '%timeout%' 

这将为您提供以下所有可能的错误消息 - 全部包含代码1033

  

为超时提供的值无效。超时必须是介于0和2147483647之间的有效整数.1033

     

等待latch时发生超时:类'%ls',id%p,类型%d,任务0x%p:%d,等待时间%d秒,标志0x%I64x,拥有任务0x%p。继续等待。 1033

     

与远程服务器实例'%。* ls'的通信在超时之前未能完成。 ALTER DATABASE命令可能尚未完成。重试该命令。 1033

     

数据库镜像超时值%d超过最大值32767. 1033   由于锁定超时,未检查数据库ID(%d)中的元数据高速缓存条目%d:%d的一致性。 1033

     

标记的交易“%。* ls”失败。尝试通过提交标记的事务在日志中放置标记时发生超时。这可能是由与Microsoft分布式事务处理协调器(MS DTC)事务或其他1033

的争用引起的      

SQL Server Destination的批量插入操作已超时。请考虑在数据流中增加SQL Server目标上的Timeout属性的值。 1033

......所有语言中都有很多错误。

因此可以安全地假设1033意味着某种超时?不幸的是,即使这不是真的:

select description from master.dbo.sysmessages where msglangid=1033
  

警告:%S_DATE发生致命错误%d。请注意错误和时间,并与系统管理员联系。

     

在Waitfor中不允许查询。

     

'%。* ls'附近的语法不正确。

     

以'%。* ls'开头的%S_MSG太长。最大长度为%d。   如果语句包含UNION,INTERSECT或EXCEPT运算符,则ORDER BY项必须出现在选择列表中。

     

ORDER BY位置编号%ld超出了选择列表中项目数的范围。

以及许多与非超时相关的错误。

所以我坚持:

IsSqlTimeout = ((ex as SqlException).Message.ToUpper().Contains("TIMEOUT");

所以要真正回答你的问题 - 这取决于你的用户实际上能够理解或应该被告知的内容。

我建议您记录一段时间内的所有错误(代码和消息),将它们分组并查看哪些错误最适合您的环境。

答案 2 :(得分:0)

此处报告了各种错误代码的含义:https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors?view=sql-server-ver15。确保在左侧选择正确的数据库版本。

相关问题