OLEDB عاد فقط dbnull، ماذا فعلت خطأ؟
-
19-09-2019 - |
سؤال
لقد حصلت على التعليمات البرمجية التالية:
// 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);
لا تنتمي إلى StackOverflow