كيف يمكنني التعامل مع DBNULL لتحويل منطقية في بلدي XSD مجموعة البيانات؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

في قاعدة البيانات الخاصة بي، ولدي بعض الأعمدة في أحد الجداول بلدي التي هي بت (منطقية) القيم. يتم السماح لهم لتكون NULL منذ الحقول ليست دائما ما تحتوي على بيانات.

ولقد مرت عملية إنشاء XSD مجموعة البيانات باستخدام الجدول وحرصت على أن يتم تعيين الحقل AllowDBNull إلى True.

ومع ذلك، عندما سحب سجل انخفاضا من قاعدة البيانات إلى DataTable واستخدام الأسلوب GetData تكوين، وأنا واجهت الخطأ التالي:

[InvalidCastException: Conversion from type 'DBNull' to type 'Boolean' is not valid.]

هل أنا بحاجة إلى تحديد شيء آخر غير في مجال القيمة_الافتراضية للعمود، أو أن هناك بعض الحقول أخرى تضع؟

وأنا في مرحلة التطوير لا يزال مع هذا المشروع، حتى إذا كان تغيير الحقول إلى شار واستخدام ويفضل / N / Y الخيار فارغة، وأنا لست سلبي جدا على الذهاب بهذه الطريقة.

هل كانت مفيدة؟

المحلول

وIMHO يجب أن لا تسمح القيم الخالية في قليلا / حقل منطقي.

ومايك Hadlow لديه وظيفة جيدة على هذا هنا:

http://mikehadlow.blogspot.com/2006/10/nullability -voodoo.html

ومنطقية هو تعريف نوع ثنائية الدولة. بجعله قيم الفارغة، الذي تضيفه دولة ثالثة. أنه سوف يعود إلى تطارد لكم في مرحلة ما.

نصائح أخرى

وقد نختلف مع إيان. ثلاثة منطق القيمة فقط قابلة للحياة كما المنطق 2 القيمة. الشخص في الجدول حيا أو ميتا أو إذا كنت لا أعرف ما إذا كان حيا أو ميتا. إذا كان مايك طريقه، لا يمكن أن تستخدم قليلا هنا. وكنت بحاجة إلى FK إلى جدول الوضع، 1 = على قيد الحياة، 2 = الميت، 3 = غير معروف.

والغرض كله من بت لتوفير مساحة، هل يمكن أن تجعل دائما عمود CHAR (1) مع القيد الحد من القيم إلى T أو F، Y أو N (أو U).

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

في الواقع، بلا قيم في قاعدة بيانات لديها بعض مفيدة للغاية من الآثار الجانبية. أوراكل (ربما قواعد البيانات الأخرى) لا بلا قيم المؤشر. SO إذا كان لديك عمود حيث قيمة واحدة فقط هي المهمة - مثل قول لديك قائمة موظف لك أبدا تطهير وبت العمود Is_Active_Employee الذي تمت فهرسته. في هذه الحالة، لعمل المنشأة، وعدد من موظفي كنت قد و>>> من عدد من الموظفين لديك الآن. نقول لديك 1٪ 1 و 99٪ 0 و.

وهذا المؤشر هو 99X أكبر مما يجب أن يكون. انها فهرسة كل 1 والتي على ما يرام لأنها 1٪ من الجدول لكنه أيضا محملة 0 لصفوف لا يمكن أبدا استخدام هذا المؤشر في العثور عليها. إذا كنت تريد كل الموظفين غير نشط، وفهرستها سيتم تجاهل وسيتم تنفيذ عملية FTS. حتى 1 و NULL سيكون أكثر كفاءة من منظور قاعدة البيانات.

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