我正在尝试创建一个这样的事务: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#如何安全、高效地玩转任何种类的内存之Span的本质 2023-04-27
- C#利用PrintDocument定制打印单据的小例子 2023-01-22
- C# 关于爬取网站数据遇到csrf-token的分析与解决 2023-03-29
- 在centos7.5使用DockerFile构建镜像时报错“Error parsing reference: "microsoft/dotnet:2.2-aspnetcore-runtime 2023-09-26
- [06]ASP.NET Core中的进程内(InProcess)托管 2023-09-26
- C# 获取硬件参数的实现方法 2022-11-19
- 详解C# ConcurrentBag的实现原理 2023-04-22
- C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除 2023-06-27
- c# – 使用Web API作为SignalR服务器并从Windows服务中使用它 2023-09-19
- .Net Core中间件中IApplicationBuilder.Map()的用法 2023-09-28