我有一个强类型数据集,它会为空值抛出此错误,
System.Data.ConstraintException:无法启用约束 . 一行或多行包含违反非null,唯一或外键约束的值 . 在System.Data.DataTable.EnableConstraints()处于System.Data.Com.EndLoadData()处于System.Data.Common.DataAdapter.FillFromReader(DataSet数据集,DataTable数据表,字符串srcTable,DataReaderContainer数据读取器,Int32 startRecord,Int32 maxRecords,DataColumn)在System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集,DataTable [] datatables,Int32的System.Data.Common.DataAdapter.Fill(DataTable [] dataTables,IDataReader dataReader,Int32 startRecord,Int32 maxRecords)处的parentChapterColumn,Object parentChapterValue) System.Data.Common.DbDataAdapter上的System.Data.Common.DbDataAdapter.Fill(DataTable [] dataTables,Int32 startRecord,Int32 maxRecords,IDbCommand命令,CommandBehavior行为)中的startRecord,Int32 maxRecords,String srcTable,IDbCommand命令,CommandBehavior行为)在Fruits.DataAccess.FruitsDataAccess.GetFruits(String User)上的Fruits.DataAccess.FruitsTableAdapters.FruitsExtTableAdapter.GetFruits(字符串用户,字符串过滤器)中填写(DataTable dataTable) ,String过滤器)在Fruits.WebServices.External.Fruity.GetFruits(String Filter)
所有列都填充了1行我正在测试它,
USE [FruitDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Fruits](
[ID] [int] NOT NULL,
[CategoryID] [int] NOT NULL,
[Title] [nvarchar](255) NOT NULL,
[URL] [nvarchar](255) NOT NULL,
[Status] [nvarchar](70) NOT NULL,
[Description] [nvarchar](1024) NULL,
[User1] [nvarchar](50) NOT NULL,
[Date] [datetime] NOT NULL,
[User2] [nvarchar](50) NULL,
[Date2] [datetime] NULL,
[Impact] [nvarchar](255) NULL,
[Solution] [nvarchar](1024) NULL,
CONSTRAINT [PK_Fruits] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Fruits] WITH CHECK ADD CONSTRAINT [FK_Fruits_Categories] FOREIGN KEY([CategoryID])
REFERENCES [dbo].[Categories] ([ID])
GO
ALTER TABLE [dbo].[Fruits] CHECK CONSTRAINT [FK_Fruits_Categories]
GO
3 回答
您可以在代码中使用此方法 . .NET检查数据集,从而抛出异常 .
DataSet / DataTable具有可获取有关错误的更多详细信息的属性 .
所以这些细节并不像你想象的那样在异常中,这就是诀窍 . 见http://www.codeproject.com/Tips/405938/Debugging-DataSet-Constraint-Errors
样品:
问题在于其中一个列名称在数据集中不匹配,不确定是什么触发了它,但匹配的列名称与一个返回修复了问题 .
我还使用了强类型数据集的“预览数据”功能,这有助于我找出问题所在 .