سؤال

لقد حصلت على التعليمات البرمجية التالية:

// personCount = 7291; correct value
int personCount = (int)new OleDbCommand("SELECT COUNT(*) AS [count] FROM [Individual]", _access).ExecuteScalar();
List<Person> people = new List<Person>();

OleDbCommand personQuery = new OleDbCommand("SELECT * FROM [Individual]", _access);

using (OleDbDataReader personReader = personQuery.ExecuteReader())
{
    int curPerson;

    while (personReader.Read())
    {
        curPerson++;
        // This runs several times
        if (personReader.IsDBNull(0)) continue;
        // [snip] create a new Person and add it to people
    }
    // at this point, curPerson == 7291 but the list is empty.
}

هذا هو الرمز الدقيق لي. الحقل 0 هو المفتاح الأساسي، لذلك لا ينبغي أبدا أن تكون فارغة، ولكن يتم إرجاع كل صف واحد من قاعدة البيانات جميع الحقول التي تم تعيينها على dbnull! لا أستطيع أن أرى ما أفعله خطأ، هل يمكن لأي شخص أن يلقي بعض الضوء على هذا؟

سلسلة الاتصال الخاصة بي هي:

مزود = microsoft.jet.oledb.4.0؛ مصدر البيانات = c: path to database.mdb

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

المحلول

لسبب واحد أو آخر، باستخدام * كان محدد العمود أعمدة Jumbling. باستخدام قائمة محددة يعمل على إصلاح هذا. ما زلت فضولي لأسباب قد يحدث هذا.

النسخة الثابتة:

OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top