【发布时间】:2009-02-09 16:09:36
【问题描述】:
我正在尝试使用 C# 从我的数据集中的 SQL 表中提取一些数据。
在这种情况下,我不需要所有列,只需要几个特定的列,但是由于我没有拉回具有强制 NOT NULL 的列,因此表的副本会引发异常
"Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."
我确信我可以通过将 unNullable 列返回到我的表来解决这个问题,但是我想避免返回不必要的数据。
我正在使用的引发此异常的查询是
SELECT DeviceSerialNumber, BuildID, LEMSCredentialsID, LEMSSoftwareID, OwnerID, RestagedDate
FROM tblDevice
WHERE (DeviceSerialNumber = @SerialNumber)
这不包括必填列“tblLocationID”。但实际上,此列仅在将数据库作为一个整体考虑时才是强制性的,而不是当我只需要在我的表单中使用构建和软件详细信息时。
我正在尝试以下列方式使用此查询。
private DataTable dtDevice;
dtDevice = taDevice.GetDataByDeviceSN_ForRestage(txtDeviceSerial.Text);
我注意到在浏览预览数据时,Visual Studio 绘制了我的 SQL 中未指定的列,包括 tblLocationID 列,但是它不会用数据填充这些列。
无论如何我可以在临时表中使用这些数据而不导入列的不可为空的方面吗?最好完全不通过未选择的列?
为了完整起见,以下是源表的定义(- 减去外键定义):
CREATE TABLE [dbo].[tblDevice](
[DeviceSerialNumber] [nvarchar](50) NOT NULL,
[Model] [nvarchar](50) NULL,
[ManufactureDate] [smalldatetime] NULL,
[CleanBootDate] [smalldatetime] NULL,
[BuildID] [int] NULL,
[Notes] [nvarchar](3000) NULL,
[AuditID] [int] NULL,
[LocationID] [int] NOT NULL,
[SimID] [int] NULL,
[LEMSCredentialsID] [int] NULL,
[LEMSSoftwareID] [int] NULL,
[OwnerID] [int] NULL,
[RestagedDate] [smalldatetime] NULL,
[Boxed] [bit] NULL,
CONSTRAINT [PK_tblDevice_1] PRIMARY KEY CLUSTERED
([DeviceSerialNumber] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
【问题讨论】:
标签: c# sql datatable dataset non-nullable