2017-11-11 3 views
1

Ich habe SQLite-Methode, die SELECT Abfrage macht:Zurückgeben von Daten mit sqCommand.ExecuteReader() ;?

try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    SQLiteDataReader reader = sqCommand.ExecuteReader(); 
    return reader.GetString(0); 
} 
} catch (Exception e) { 
// do exception handling 
} 

Ich versuchte zuletzt zu bekommen eingefügt ID:

sql = 'SELECT id FROM Pacients ORDER BY id DESC LIMIT 1'; 

ich di versucht, das mag:

return reader.GetString(0); 

es mich werfen down auf Ausnahme "Keine aktuelle Zeile"

+0

Bevor Sie versuchen, etwas aus einem DataReader herauszuholen, sollten Sie Read aufrufen und den Rückgabewert prüfen. Wenn von Ihrer Abfrage nichts falsch zurückgegeben wurde. Viele Beispiele herum. – Steve

+0

In der Tat müssen Sie * lesen aufrufen, um in die erste Zeile zu gelangen (und zu jeder nachfolgenden Zeile zu gelangen) –

+0

Es gibt eine Menge Beispiele für SQL-Abfrage, nicht für Sqlitre. Kannst du damit helfen? – OPV

Antwort

2

Afte Wenn Sie ExecuteReader aufrufen, müssen Sie Read auf Position im ersten Datensatz des Datasets aufrufen. Lesen gibt Wahr/Falsch zurück, um Sie zu informieren, wenn Datensätze zum Lesen vorhanden sind. So Ihr Code Änderungen an

try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    SQLiteDataReader reader = sqCommand.ExecuteReader(); 
    if(reader.Read()) 
    return reader.GetString(0); 
    else 
    return ""; // or whatever you want to return if no records are present 
} 
} catch (Exception e) { 
// do exception handling 
} 

sagte, dass sich daran erinnern, wenn Sie nur eine Spalte aus einer einzelnen Zeile abrufen möchten, wie Sie in Ihrer Anfrage haben, dann ist es besser, ExecuteScalar verwenden anstelle von ExecuteReader

try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    object result = sqCommand.ExecuteScalar(); 
    return result != null ? result.ToString() : ""; 
} 
} catch (Exception e) { 
// do exception handling 
} 
+0

Thak Sie, hw zu gebe alle Daten hier zurück: 'if (reader.Read()) return reader.GetString (0);'? Das nach dem Wert nach Spaltenname erhalten? – OPV

+0

Nur 'Leser zurückgeben'? – OPV

+0

Ihr Beispiel gibt Null oder 1 Datensatz zurück. Was meinst du mit _all data_? – Steve