0

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 は、列 tblLocationID を含む SQL で指定されていない列を描画しますが、これらの列にはデータが入力されません。

列のnull不可の側面をインポートせずに、一時テーブルでこのデータを使用できる方法はありますか? できれば、選択されていない列をまったく引っ張らないでください。






完全を期すために、ソース テーブルの定義 (- 外部キー定義を除く) を次に示します。

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]
4

3 に答える 3

1

taDevice は tableadapter だと思いますか?型指定されたデータセットで生成された?

「FillDataByDeviceSN」メソッドを生成することもできます (Get と Fill を生成できます)。

次に、(疑似っぽいコード)を取得します:

tblDeviceDataTable dtService = new tblDeviceDataTable();
dtService.tblLocationID.AllowDbNull = true;
taDevice.FillDataByDeviceSN(dtService,txtDeviceSerial.Text);
于 2009-02-09T19:14:31.860 に答える
0

ここにいくつかのオプションがあります:

使用するフィールドのみの「型なしデータセット」を作成します。

また

入力したデータセットのNOTNULLフィールドのNullValueプロパティを、デフォルトの「throwexception」から「empty」に変更します。

また

EnforceConstraintsをFalseに設定するためにPatrickが提案したことを試してください。

于 2009-02-09T19:18:07.763 に答える