تحقق من وجود عمود في DataReader أو لا يقوم باختراق المصحح على بعض الاستثناءات

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي التعليمات البرمجية التي تبدو مثل:

  //System.Data.IDataRecord dr
  try
  {
       Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
  }
  catch (IndexOutOfRangeException) { } //swallow

وأنا لا أعرف إذا كان العمود الموحد سيكون حاضرا في datareader، لذلك أفعل ذلك للتحقق. أنه يعمل بشكل جيد (غير hackish قليلا، على الرغم من).

عند I إرفاق المصحح على الرغم من وقوعه على أنها كلما يطرح الاستثناء ولكن. مزعج للغاية.

هل هناك طريقة أفضل لكتابة هذا الرمز. أو هل هناك طريقة البصرية ستوديو من يقول أنه تجاهل الاستثناء وليس كسر (ولكن فقط هنا، ليس في كل مكان).

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

المحلول

نعم، يمكنك استخدام الأسلوب GetSchemaTable () من DataReader لتحصل على قائمة الأعمدة، ثم يمكنك معرفة ما إذا كان وجود هذا العمود.

هذا سؤال مماثل جدا مفيدة.

نصائح أخرى

وأود أن مجرد استخدام GetOrdinal() في بداية الحلقة العثور على مؤشرات العمود الأول (وتخزينها في متغير). ثم انظروا فقط ما إذا كان >=0. وهذا له ميزة تحسين الأداء جدا (طالما أنك ثم استخدام هذا صحيحا بالنسبة لجميع الوصول، وليس الاسم).

ولا، لا توجد وسيلة أنيقة من تجاهل استثناء خاص. هل يمكن التقاط وابتلاع، لكن ليس هذا هو نهج جيد.

ويمكنك ببساطة استخدام التعليمات البرمجية التالية:

reader.GetSchemaTable().Columns.Contains("Your_Column")

وهذا سيعود منطقية.

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top