解析ASP.NET(MVC)应用程序中的SQLException错误?

时间:2009-09-14 14:48:50

标签: asp.net sql sql-server validation exception

虽然验证可以防止大多数SQL错误,但有些情况根本无法阻止。我可以想到其中两个:某些列的唯一性和错误的外键:验证无效,因为在验证之后和数据库插入之前,其他方可以创建或删除对象。因此,至少有两个SQL错误会导致用户输入无效的消息。

SQLException具有错误类型的Number属性,但我不知道如何在不尝试解析实际错误消息文本的情况下找出哪个列重复或哪个外键错误,恰好是本地化的。

除了解析错误消息之外,是否有任何方法可以识别违规列(这意味着至少要严格选择SQL Server的语言并始终使用它)?

修改

我应该提到我来自RubyOnRails,其方法是:让我们假装db不存在:没有约束,没有db强制外键等等。当我接近ASP.NET MVC时,我我想摆脱铁路的偏见,并接受db确实存在的事实。

1 个答案:

答案 0 :(得分:0)

你确定无法阻止这两种情况吗?

通过使用Identity(数据库生成的)主键列,可以避免Insert上的唯一约束SQLexceptions。 SQL Server将保证该值是唯一的。

将相关行插入由外键链接的表中也是如此。在主表中插入行之前,首先在每个引用的表中插入一行。使用IDENTITY_INSERT获取每个自动生成的主键的值,并将其用作主表中的外键。

您还应该在事务中包装这些单独的语句,以确保成功插入所有表或者不插入任何表。该事务还将这些更改与所有其他并发数据库访问隔离(隐藏),直到提交事务为止。