我正在尝试创建一个这样的事务:using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,options)){try{dbContext.MyTable.PartnerId = someGuid;dbContext.SaveChanges();scope.C...

我正在尝试创建一个这样的事务:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,
options))
{
try
{
dbContext.MyTable.PartnerId = someGuid;
dbContext.SaveChanges();
scope.Complete();
dbContext.AcceptAllChanges()
}
catch (Exception ex)
{
log.LogMessageToFile("Exception - ExceptionType: " +
ex.GetType().ToString() + "Exception Messsage: " + ex.Message);
}
}
我知道如果我尝试在特定列中使用重复的sql中插入一个项目,我从sql中得到以下错误:
Cannot insert duplicate key row in object ‘dbo.MyTable’ with unique index ‘idx_PartnerId_notnull’. The duplicate key value is (7b072640-ca81-4513-a425-02bb3394dfad).
我怎么能以编程方式专门捕获这个异常,所以我可以采取行动.
这是我对我的专栏的限制:
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;
解决方法:
试试这个:
try {
}
catch (SqlException sqlEx) {
}
catch (Exception ex) {
}
在此异常中捕获服务器端发生的SQL错误和警告.
在这里阅读:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception(v=vs.110).aspx
上面的答案将允许您捕获SqlException,但如果您只想通知用户特定错误,则需要进一步优化’SqlException’catch块中的处理. SqlException类具有“ErrorCode”属性,您可以从中导出服务器生成的实际错误.尝试做类似下面的事情:
try
{
}
catch (SqlException sqlEx)
{
if(sqlEx.ErrorCode == 2601)
{
handleDuplicateKeyException();
}
}
2601是SQL Server为您生成的特定错误的实际错误代码.有关完整列表,请运行SQL:
SELECT * FROM sys.messages
本文标题为:c# – 如何处理特定数据库错误的异常


基础教程推荐
- Linq两个List集合取交集的实现 2023-02-03
- C#爬虫通过代理刷文章浏览量 2022-12-26
- C#服务端图片打包下载实现代码解析 2023-03-04
- 详解c#中Array,ArrayList与List<T>的区别、共性与相互转换 2023-05-11
- c# – Azure powershell中无法识别“azure” 2023-09-20
- 深入分析c# 继承 2023-03-08
- .net core运行环境搭建 linux + windows 2023-09-28
- c# 实现计时器功能 2023-03-27
- C#学习教程之Socket的简单使用 2023-01-11
- Linux服务器部署.Net Core笔记:三、CentOS 7上安装.NetCore运行环境 2023-09-26