SQLEXCEPTION ErrorCode的(SqlException ErrorCodes)

2019-09-17 03:35发布

我有一个问题,这是没有问题的。 我的数据库有一些限制,如唯一的名称(列存储的东西,必须是唯一的名称),当插入或更新,数据库验证,如果我们不重写一些名称,如果是,则返回一个错误,是可转换到SQLEXCEPTION使用代码2627

我的问题是...如果存在一些表或东西,我可以咨询以指示最终用户做什么?

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

Answer 1:

我想,你应该看看SQLException的错误性质和看一看的错误数量应该指向你在master.dbo.sysmessages表的消息。



Answer 2:

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

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

这会给你以下所有可能的错误消息-所有代码1033

提供的超时值无效。 超时必须在0到2147483647之间1033有效整数

类 '%1!',ID%P,类型%d,任务0X%P:%d,WAITTIME%d秒,国旗为0x%I64x,拥有任务为0x%对超时等待闩锁时发生。 继续等待。 1033

通讯与远程服务器实例“%1!”失败,其超时前完成。 ALTER DATABASE命令可能还没有完成。 重试该命令。 1033

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

该标记事务“%1!”失败。 尝试通过提交标记事务放置标记日志中发生超时。 这可以通过与争Microsoft分布式事务处理协调器(MS DTC)事务或其他1033所致

SQL Server目标的大容量插入操作已经超时。 请考虑在数据流的SQL Server目标增加超时属性的值。 1033

......而在所有语言中多出很多错误。

因此,它是安全的假设1033是指某种超时? 不幸的是,即使事实并非如此:

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

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

查询在WAITFOR不允许的。

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

该S_MSG%,与开始“%1!”太长。 最大长度为%d。 如果语句中包含UNION,交叉或EXCEPT运算符ORDER BY项目必须出现在选择列表中。

该ORDER BY位置号%是出在选择列表中的项目数的范围。

和许多许多非超时相关的错误。

所以我坚持用:

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

所以实际上回答你的问题 - 这取决于你的用户实际上能够理解还是应该被告知。

我建议你记录所有错误(代码和消息)在一段时间内,他们组,看看哪些是最常见的,以您的环境。



文章来源: SqlException ErrorCodes