كيف يمكنني تشغيل استعلام على مجموعة البيانات التي ترجع أعمدة مختلفة إلى طاولة المفاوضات؟

StackOverflow https://stackoverflow.com/questions/528776

سؤال

وأنا أحاول أن سحب بعض البيانات من جدول SQL في بلدي مجموعة البيانات باستخدام C #.

في هذه الحالة أنا لا تحتاج الى كل الأعمدة قليلة فقط منها محددة، ولكن كما أنا لا يتراجع عمود مع إلزامية 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);

ولقد لاحظت عند تصفح البيانات المعاينة، فيجوال ستوديو توجه الأعمدة التي لم يتم تحديدها في 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]
هل كانت مفيدة؟

المحلول

وأفترض taDevice هو tableadapter؟ ولدت مع مجموعة البيانات كتبته؟

هل يمكن أن يولد أيضا طريقة "FillDataByDeviceSN" (يمكنك الحصول على توليد وتعبئة)

وبعد ذلك تحصل (رمز الزائفة العش):

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

نصائح أخرى

والعمود إلزامي لأن الفوقية يروي العميل الذي لإضافة أي صفوف جديدة (أو تعديل الصفوف)، والقيم لهذا العمود يجب أن تكون المقدمة. إذا كنت لا تغيير البيانات ولست بحاجة رسم الخرائط ذات اتجاهين، شيء أكثر خفيفة الوزن مثل DataReader قد تكون أكثر ملاءمة.

وهنا عدد قليل من الخيارات:

وإنشاء "مجموعة بيانات مصنف" لمجرد الحقول التي تريد استخدامها.

وOR

وتغيير خاصية NullValue الحقل NOT NULL في ورقة مطبوعة من الافتراضي "استثناء رمي" إلى "فارغة".

وOR

وحاول ما اقترح باتريك لتحديد EnforceConstraints إلى خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top