ما عدا ينبغي أن يلقى عندما ADO.NET الاستعلام لا يمكن استرداد البيانات المطلوبة?

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

  •  02-07-2019
  •  | 
  •  

سؤال

في محاولة لإضافة بعض المعلمة التثبيت و الاستخدام الصحيح دلالات على التطبيق لدينا ، ونحن نحاول إضافة الصحيح معالجة الاستثناء لدينا .تطبيقات NET.

سؤالي هو:عندما رمي في استثناءات ADO.NET إذا قام الاستعلام بإرجاع أية بيانات أو بيانات لا يمكن العثور على أي نوع من الاستثناء يجب استخدامها ؟

Psuedocode:(قراءة, لا تدقق دلالات الرمز ، أنا أعلم أنه لن ترجمة)

public DataSet GetData(int identifier)
{
    dataAdapter.Command.Text = "Select * from table1 Where ident = " + identifier.toString();
    DataSet ds = dataAdapter.Fill(ds);
    if (ds.table1.Rows.Count == 0)
        throw new Exception("Data not found");

    return ds;
}
هل كانت مفيدة؟

المحلول

على MSDN التوجيهية الدولة:

  • النظر في رمي الاستثناءات الحالية المقيمين في نظام مساحات بدلا من إنشاء مخصص استثناء أنواع.

  • إنشاء ورمي مخصص الاستثناءات إذا كان لديك حالة الخطأ التي يمكن التعامل معها برمجيا بطريقة مختلفة عن أي الاستثناءات الحالية.وإلا رمي واحدة من الاستثناءات الحالية.

  • لا خلق و رمي الجديد الاستثناءات فقط أن يكون فريقك هو الاستثناء.

لا توجد قاعدة جامدة وسريعة:ولكن إذا كان لديك سيناريو لعلاج هذا الاستثناء بشكل مختلف ، والنظر في إنشاء مخصص نوع الاستثناء ، مثل DataNotFoundException كما اقترح من قبل يوهان Buret.

وإلا فإنك قد تنظر في رمي واحد من القائمة استثناء أنواع ، مثل نظام.البيانات.DataException أو ربما حتى النظام.مجموعات.Generic.KeyNotFoundException.

نصائح أخرى

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

public class myException : Exception
{
   public myException(string s) : base() 
   {
      this.MyReasonMessage = s;
   }
}

public void GetData(int identifier)
{
    dataAdapter.Command.Text = "Select * from table1 Where ident = " + identifier.toString();
    DataSet ds = dataAdapter.Fill(ds);
    if (ds.table1.Rows.Count == 0)
        throw new myException("Data not found");
}

كنت حقا ينبغي أن تحدد بنفسك استثناء :DataNotFoundException.

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

try
{
     int i;
     GetData(i);

}
catch(Exception e) //will catch many many exceptions
{
    //Handle gracefully the "Data not Found" case;
    //Whatever else happens will get caught and ignored
}

حيث اصطياد فقط DataNotFoundEXception سوف تحصل فقط في حال كنت حقا تريد التعامل معها.

try
{
     int i;
     GetData(i);

}
catch(DataNotFoundException e) 
{
    //Handle gracefully the "Data not Found" case;
} //Any other exception will bubble up

هناك فئة مسمى SqlException ، عندما تكون هناك مشاكل مع SQL المحرك ولكن من الأفضل ألا تفرط مع الأعمال التجارية الخاصة بك المنطق

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