Ik heb een methode in mijn C# -klasse die een enkel resultaat van een SQLite-database aanroept. Mijn databaseverbinding wordt met succes geopend, maar na het uitvoeren van onderbrekingspunten op verschillende plaatsen, merkte ik iets vreemds op. Dit is mijn code:
Dictionary getResult(string id)
{
dataConn.Open();
SQLiteCommand comm = dataConn.CreateCommand();
comm.CommandText = "SELECT * FROM [tableName] WHERE id='" + id + "'";
SQLiteDataReader result = comm.ExecuteReader();
Dictionary resultDict = new Dictionary();
/*
This doesn't work.
while(result.Read())
{
resultDict.Add(result.GetName(0), result.GetString(0));
}
*/
result.Read();
for (int i = 0; i < result.FieldCount; i++)
{
resultDict.Add(result.GetName(i), result.GetString(i));
}
result.Dispose();
comm.Dispose();
dataConn.Close();
return resultDict;
}
Ik weet dat ik SQLiteParameters
kan gebruiken in plaats van inline aaneenschakeling, maar om de een of andere reden braken ze mijn vraag.
In mijn eerste loop, als ik een breekpunt plaats net voordat het begint, kan ik zien dat mijn vraag een enkel resultaat heeft opgeleverd, precies wat ik nodig heb. Maar, wanneer ik in mijn loop loop, voordat ik een andere code dan reader uitvoer.Read()
, VS2010 zegt: "Opsomming leverde geen resultaten op." maar ze waren er momenten daarvoor?
Dus ik probeerde de tweede lus. Uitvoeren van reader.Read()
, en vervolgens door herhaalde velden lussen. Wanneer ik dat doe, geeft VS2010 de fout "Geen huidige rij geselecteerd.".
Ik ben hiermee volledig verdwaald, ik heb geen idee wat er mis is, omdat de rest van mijn SQLite-verbindingen voor andere databasebestanden prima werken. Ik heb mijn query in SQLite Administrator
getest en mijn query wordt prima uitgevoerd. Het enige dat ik nastreef is om een woordenboek te krijgen waarin de sleutel de naam van het veld is en de waarde het resultaat is van dat veld. Om het even welke ideeën over wat verkeerd is? Of is er een manier om deze code eenvoudiger te maken, tijdens het oplossen ervan?