我正在尝试创建一个这样的事务: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# – 如何处理特定数据库错误的异常
- 如何最大限度地降低多线程C#代码的复杂性 2023-01-17
- C#从数据库读取图片并保存的两种方法 2023-03-29
- 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#) 2023-04-28
- Unity 实现鼠标滑过UI时触发动画的操作 2023-04-10
- c# – ITextSharp合并多个pdf的内存不足异常 2023-09-18
- c# winform treelistview的使用(treegridview)实例详解 2022-11-27
- unity实现玻璃效果 2023-02-16
- C#并发容器之ConcurrentDictionary与普通Dictionary带锁性能详解 2023-04-10
- C# 使用Winform 获取下拉框 选中的值 2023-03-28
- 京东联盟C#接口测试示例分享 2022-12-02