EF例外:字符串或二进制数据将被截断.该语句已终止.?

mon*_*tro 39 c# sql-server entity-framework exception

我已经阅读了很多与此问题相关的帖子,但找不到答案.我正在尝试将大量数据从Excel加载到SQL Server中.成千上万的记录.我得到了这个例外:

字符串或二进制数据将被截断.该语句已终止.

显然,某些值超出了数据库中的字段大小.该错误来自SQL Server AFIK.


我的问题 - 我怎么可能知道什么记录和什么字段值导致了这个?

EF异常中没有具体细节,除了我提到的那个.

任何帮助表示赞赏.

有人要求代码片段,但实际上非常简单,问题不在于代码:

// employees is a List<Employee> collection loaded from Excel
using (var context = new Entities())
{
    employees.ForEach(e => context.Employee.AddObject(e));
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

此外,使用DbEntityValidationException(仅在Entity Framework 5.0中可用)的建议方法不起作用,catch块未捕获异常.

try
{
    ImportData();
}
catch (DbEntityValidationException ex)
{
    foreach (var item in ex.EntityValidationErrors)
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我找到的唯一解决方案是使用SQL Server Profiler,并定义要监视的以下事件:

在此输入图像描述

在此输入图像描述

现在我可以看到电子邮件太长了.

Cuo*_*yen 6

catch (DbEntityValidationException ex)
{
    foreach (var item in ex.EntityValidationErrors)
    {
        //... inspect here 
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在foreach循环中找到所需的信息.

希望有所帮助.

  • 减去一个 - 因为返回的异常不是`DbEntityValidationException`的类型,所以答案对这个问题没有帮助. (6认同)
  • 同样在这里。在 EF6.01 中的 SaveChanges 中,其中一个字段太长,我得到一个 SqlException 作为 DbUpdateException 内 UpdateException 内的内部异常。我的模型是同步的。 (2认同)

D S*_*ley 5

您不能达到这个水平。SQL Server拒绝整个查询。

我会根据您的数据库约束(例如字符串大小,日期格式等)向数据添加一些预检查。

或者,您可以TRIM在尝试插入之前将原始数据中的每个字符串字段调整为相应的字段大小。