繁体   English   中英

从SqlException中提取结构化信息

[英]Extract structured information from SqlException

假设我从C#应用程序执行了一条SQL语句,该语句导致SqlException并抛出以下错误消息:

违反UNIQUE KEY约束“ MyUniqueConstraint”。 无法在对象“ MyTable”中插入重复键。 重复的键值为(MyValue)。

我知道整个字符串都来自数据库。 我想从消息中提取相关部分-类似于此问题 ,但我实际上想提取数据,例如MyUniqueConstraintMyTableMyValue ,而不仅仅是SQL错误号。

实际上,解析消息不是一个选项,因为它容易出错:您必须为每个可能的错误执行此操作,并且如果错误文本从一个版本的SQL Server更改为另一个版本, 则将存在严重问题

当发生数据库级错误时(理想情况下是从异常中),是否可以从应用程序中合理地获取此类结构化信息?

不久前,我遇到了类似的问题 ,并且发现即使根据其数量过滤SqlExceptions也是有问题的。

除此之外,我还没有遇到可以从SqlException获取数据详细信息的解决方案。 也就是说,除了解析消息。 这里的问题之一是服务器消息的文本对于不同的语言和服务器版本是不同的

实际上,我还记得mssql主数据库中有一个系统表/视图,其中包含所有不同语言的错误消息。 您可以尝试基于此解析消息,但是某些SqlException甚至不是从服务器端开始的...

我想在这里至少说一点有用的事情,所以:

在名称空间System.Data中,存在DBConcurrencyException ,它在某种程度上似乎很有用(意味着:在一种情况下,与该问题并不完全相关)。 它具有Row属性(导致引发异常的行,您可以使用它来获取表名和数据)。

一厢情愿。

我知道整个字符串都来自数据库

是的,它确实。 它是一个字符串。

实际上,解析消息不是一个选项,因为它容易出错

解析是唯一选项,因为数据库仅提供2个项目:sql错误号和字符串。 因此,您要么想出一个通用的水晶球,要么就用自己拥有的东西工作-这就是解析。

据我所知,没有一个数据库能够提供神秘地隐藏在异常中的更多信息-如果这样做,反正不是跨数据库的标准方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM