2009-02-09 1 views
0

Я пытаюсь извлечь некоторые данные из таблицы SQL в моем наборе данных, используя C#.Как запустить запрос в наборе данных, который возвращает разные столбцы в таблицу?

В этом случае мне не нужно все столбцы только несколько конкретных из них, тем не менее, как я не отходили столбец с обязательным NOT NULL, копия таблицы бросает исключение

"Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints." 

Я уверен, что могу обойти это, вернув столбец unNableable в мой стол, но я хочу избежать возврата ненужных данных.

Запрос я использую, который бросает это исключение составляет

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] 

ответ

1

Я предполагаю, что taDevice является таблицей адаптера? сгенерированный с помощью типизированного набора данных?

Вы также можете сгенерировать метод "FillDataByDeviceSN" (вы можете создать Get и заливку)

, то вы получите (псевдо-иш код):

tblDeviceDataTable dtService = new tblDeviceDataTable(); 
dtService.tblLocationID.AllowDbNull = true; 
taDevice.FillDataByDeviceSN(dtService,txtDeviceSerial.Text); 
+0

Это делает работу. Спасибо Большое. Это принесло мне совершенно новый слой конфессии, но это еще один вопрос :-) Еще раз спасибо –

0

Столбец является обязательным, так как метаданные сообщает клиенту, что добавлять новые строки (или изменить строки), значения для этого столбца должны быть предоставлены. Если вы не изменяете данные и не нуждаетесь в двустороннем сопоставлении, более подходящим может быть что-то более легкое, например, DataReader.

+0

DataReader, я буду смотреть на это завтра. Thankx Cade Roux –

0

Вот несколько вариантов:

Создайте «нетипизированный набор данных» только для полей, которые вы хотите использовать.

ИЛИ

Изменить свойство NullValue из NOT NULL поля в вашем типизированного набора данных из по умолчанию «вбрасывания исключения» в «пустой».

ИЛИ

Попробуйте, что Патрик предложил для установки EnforceConstraints в значение False.

Смежные вопросы