【发布时间】:2014-11-03 09:07:15
【问题描述】:
我有一个强类型数据集,它会为空值抛出此错误,
System.Data.ConstraintException:无法启用约束。一个或 更多行包含违反非空、唯一或外键的值 约束。在 System.Data.DataTable.EnableConstraints() 在 System.Data.DataTable.EndLoadData() 在 System.Data.Common.DataAdapter.FillFromReader(数据集数据集, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, 对象 parentChapterValue) 在 System.Data.Common.DataAdapter.Fill(DataTable[] 数据表, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 在 System.Data.Common.DbDataAdapter.FillInternal(数据集数据集, DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,字符串 srcTable、IDbCommand 命令、CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataTable[] 数据表,Int32 startRecord、Int32 maxRecords、IDbCommand 命令、CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataTable 数据表)在 Fruits.DataAccess.FruitsTableAdapters.FruitsExtTableAdapter.GetFruits(字符串 用户,字符串过滤器)在 Fruits.DataAccess.FruitsDataAccess.GetFruits(字符串用户,字符串 过滤器)在 Fruits.WebServices.External.Fruity.GetFruits(String 过滤器)
所有的列都填充了 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
【问题讨论】:
-
简短回答:不,你可以用动态 sql 做一些讨厌的事情,但我不建议这样做。
-
谢谢@Tristan,我现在改变了我的问题
-
尝试
SELECT f.* FROM dbo.Fruits AS f WHERE NOT EXISTS (SELECT 1 FROM dbo.Categories AS c WHERE c.id = f.categoryID);找出哪些行违反了 FK 约束。
标签: c# sql-server-2008 stored-procedures strongly-typed-dataset