c# ناطق ما هي أفضل طريقة للكشف إذا كان إيداتريدر فارغ؟




قاموس عربي انجليزي ناطق مجاني (4)

if(dr.Read())
{
   //do stuff
}
else
{
 //it's empty
}

وعادة ما تفعل ذلك على الرغم من:

while(dr.Read())
{
}

يبدو أن IDataReader.Read () صحيح دائما مرة واحدة على الأقل (إذا كنت مخطئا حول هذا اسمحوا لي أن أعرف.) فكيف يمكنك أن تقول إذا كان لديه أي سجلات دون مجرد التفاف عليه في محاولة / الصيد؟


تعثرت فقط عبر هذه المشكلة وخرجنا بهذا ...

bool isBeforeEoF;

do
{
    isBeforeEoF = reader.Read();

    if (isBeforeEoF)
    {
        yield return new Foo()
        {
            StreamID = (Guid)reader["ID"],
            FileType = (string)reader["Type"],
            Name = (string)reader["Name"],
            RelativePath = (string)reader["RelativePath"]
        };         
    }

} while (isBeforeEoF);

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


يمكنك فقط إرسال System.Data.IDataReader إلى System.Data.Common.DbDataReader

using (System.Data.IDataReader IReader = ICommand.ExecuteReader())
{
    if (((System.Data.Common.DbDataReader)IReader).HasRows)
    {
        //do stuff
    }
} // End Using IReader 

انها شر نقية، ولكن (عادة) يعمل؛)

(على افتراض يتم تنفيذ مثيل IDataReader الخاص بك من قبل موفر ADO.NET مخصص، وليس بعض فئة سخيفة مخصصة من يدكم الذي ينفذ فقط IDataReader بدلا من اشتقاق من DbDataReader [الذي ينفذ IDataReader ]).







ado.net