3

私は次のコードを持っています:

// 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は主キーであるため、nullになることはありませんが、データベースから返されるすべての行で、すべてのフィールドがDBNullに設定されています。自分が間違っていることがわかりません。誰かがこれに光を当てることができますか?

私の接続文字列は次のとおりです。

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\ path \ to \ database.mdb

4

1 に答える 1

2

何らかの理由で、*列セレクターを使用すると、列がごちゃごちゃしていました。特定のリストを使用すると、これが修正されます。なぜこれが起こるのか、私はまだ興味があります。

修正版:

OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
于 2009-08-21T05:18:48.777 に答える