如何找出违反约束的列和值?异常消息根本没有用处:
无法启用约束.一行或多行包含违反非null,唯一或外键约束的值.
Joe.. 20
像许多人一样,我有自己的标准数据访问组件,其中包括返回DataSet的方法.当然,如果抛出ConstraintException,DataSet不会返回给调用者,因此调用者无法检查行错误.
我所做的是在这些方法中捕获并重新抛出ConstraintException,记录行错误详细信息,如下例所示(使用Log4Net进行日志记录):
... try { adapter.Fill(dataTable); // or dataSet } catch (ConstraintException) { LogErrors(dataTable); throw; } ... private static void LogErrors(DataSet dataSet) { foreach (DataTable dataTable in dataSet.Tables) { LogErrors(dataTable); } } private static void LogErrors(DataTable dataTable) { if (!dataTable.HasErrors) return; StringBuilder sb = new StringBuilder(); sb.AppendFormat( CultureInfo.CurrentCulture, "ConstraintException while filling {0}", dataTable.TableName); DataRow[] errorRows = dataTable.GetErrors(); for (int i = 0; (i < MAX_ERRORS_TO_LOG) && (i < errorRows.Length); i++) { sb.AppendLine(); sb.Append(errorRows[i].RowError); } _logger.Error(sb.ToString()); }
Nikki9696.. 11
您可以检查一个名为RowError的属性.
见http://dotnetdebug.net/2006/07/16/constraintexception-a-helpful-tip/
编辑添加此链接显示行的迭代,以查看哪些有错误.
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic58812.aspx
像许多人一样,我有自己的标准数据访问组件,其中包括返回DataSet的方法.当然,如果抛出ConstraintException,DataSet不会返回给调用者,因此调用者无法检查行错误.
我所做的是在这些方法中捕获并重新抛出ConstraintException,记录行错误详细信息,如下例所示(使用Log4Net进行日志记录):
... try { adapter.Fill(dataTable); // or dataSet } catch (ConstraintException) { LogErrors(dataTable); throw; } ... private static void LogErrors(DataSet dataSet) { foreach (DataTable dataTable in dataSet.Tables) { LogErrors(dataTable); } } private static void LogErrors(DataTable dataTable) { if (!dataTable.HasErrors) return; StringBuilder sb = new StringBuilder(); sb.AppendFormat( CultureInfo.CurrentCulture, "ConstraintException while filling {0}", dataTable.TableName); DataRow[] errorRows = dataTable.GetErrors(); for (int i = 0; (i < MAX_ERRORS_TO_LOG) && (i < errorRows.Length); i++) { sb.AppendLine(); sb.Append(errorRows[i].RowError); } _logger.Error(sb.ToString()); }
您可以检查一个名为RowError的属性.
见http://dotnetdebug.net/2006/07/16/constraintexception-a-helpful-tip/
编辑添加此链接显示行的迭代,以查看哪些有错误.
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic58812.aspx