SQLite 데이터베이스에서 단일 결과를 호출하는 C# 클래스에 메서드가 있습니다. 내 데이터베이스 연결이 성공적으로 열리지 만 다른 곳에서 중단 점을 실행 한 후 이상한 것으로 나타났습니다. 내가 대신 인라인 연결의 SQLiteParameters
를 사용할 수 있다는 것을 알고SQLiteDataReader.read() 결과가 비어 있습니까?
Dictionary<string, string> getResult(string id)
{
dataConn.Open();
SQLiteCommand comm = dataConn.CreateCommand();
comm.CommandText = "SELECT * FROM [tableName] WHERE id='" + id + "'";
SQLiteDataReader result = comm.ExecuteReader();
Dictionary<string, string> resultDict = new Dictionary<string, string>();
/*
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;
}
하지만, 어떤 이유로 그들은 내 쿼리를 파괴했다 : 이것은 내 코드입니다.
첫 번째 루프에서 시작하기 직전에 중단 점을 배치하면 내 쿼리에서 단일 결과를 반환한다는 것을 알 수 있습니다. 그러나 루프에 들어가면 reader.Read()
이 아닌 코드를 실행하기 전에 VS2010에 "열거로 결과가 없습니다."라고 표시됩니다. 하지만 그들은 전에 그곳에 있었습니까?
그래서 두 번째 루프를 시도했습니다. reader.Read()
을 실행 한 다음 반환 된 필드를 반복합니다. 그렇게하면 VS2010에서 "현재 행을 선택하지 않았습니다."오류가 발생합니다.
다른 데이터베이스 파일에 대한 나머지 SQLite 연결이 정상적으로 작동하기 때문에 나는 무엇이 잘못되었는지 전혀 알지 못합니다. SQLite Administrator
에 내 쿼리를 테스트 한 결과 내 쿼리가 완벽하게 올바르게 실행됩니다. 내가 목표로하는 것은 키가 필드의 이름 인 사전으로 끝나는 것입니다. 값은 해당 필드의 결과입니다. 무엇이 잘못되었는지에 대한 아이디어가 있습니까? 또는이 코드를 수정하는 과정에서이 코드를 더 간단하게 만들 수있는 방법이 있습니까?
Unity Mono에서 작동합니다. – Maadiah