SqlException疑难解答
本文关键字:疑难解答 SqlException | 更新日期: 2023-09-27 18:23:56
编辑3
需要明确的是,在这一点上:
1) 我在输出中看到SQL异常,但它没有"捕获"任何异常。。。代码执行正常,我知道有异常的唯一原因是我正在查看输出窗口。实体似乎适用于初始读取(它返回了预期的数据)。
2) 当我尝试这样做时,实体挂起。SaveChanges,但我似乎无法"捕获"任何异常。。。它只是挂着。不知道为什么?
原始帖子我有一个C#控制台应用程序,使用.Net 4.5,使用实体框架6.1.3
我可以读取我的数据库,这样我就知道连接字符串和凭据是正确的。我的问题是,当我执行DbContext.SaveChanges()
时,我的应用程序挂起,如果我将光标挂在Visual Studio中的SaveChanges
方法上,弹出窗口显示它已抛出:
System.Data.Entity.InfrastructureDbUpdateException
System.Data.Entity.InfrastructureConcurrencyException
System.Data.Entity.Validation.DbEntityValidationException
System.NoSupportedException
System.ObjectDisposedException
System.InvalidOperationException
我试着按照下面的代码捕获其中的一些,但在阅读其他SO文章时,我似乎无法捕获这些异常?有人知道怎么抓这些吗?
请注意,在执行这些SaveChanges
之前,我能够从另一个表中读取,因此我知道我的凭据和连接字符串可以工作,并且我有连接,实体似乎至少可以工作。
还有一条信息:这几天前还有效。。。我只是不知道我能做些什么来"打破它"!在另一台服务器上使用SQL Server。
连接字符串为:
<add name="DataContext"
connectionString="data source=1.2.3.4;initial catalog=db1;user id=user1;password=pwd1;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
所以底线是我的应用程序在执行.SaveChanges
时挂起,我不知道为什么。。。
try
{
return _context.SaveChanges();
}
catch (DbUpdateException e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return 0;
}
catch (DbEntityValidationException dbEx) // added for debug.
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
Console.WriteLine(string.Format("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage));
Console.ReadLine();
}
}
return 0;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
return 0;
}
编辑1
例外情况被确认为不真实。它们是ReSharper或MS Productivity工具提供的弹出窗口,向我显示可能的异常。。。我想。
所以我只能挂在.SaveChanges
上,不知道为什么?
编辑2
我确实看到,在第一次数据库读取中,调试输出窗口显示异常,即使读取有效!请注意,这也在try/catch(Catch (Exception e)
)块中,并且不会捕获异常!
System.Data.dll中首次出现类型为"System.Data.SqlClient.SqlException"的异常
EntityFramework.dll中首次出现类型为"System.Data.Entity.Core.EntityCommandExecutionException"的异常
EntityFramework.SqlServer.dll 中首次出现类型为"System.Data.Entity.Core.EntityCommandExecutionException"的异常
您的问题在e.ToString()
中。您要检查e.Message
属性。您还可以检查是否存在e.InnerException。
catch (Exception e)
{
if (e.InnerException != null) {
Console.WriteLine(e.InnerException);
} else {
Console.WriteLine(e.Message);
}
Console.ReadLine();
return 0;
}