2017-11-11 126 views
1

我有sqlite的方法,使SELECT查詢:如何使用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 
} 

我試圖讓最後插入的ID:

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

我試圖迪,像:

return reader.GetString(0); 

它拋出我打破例外「沒有當前行」

+0

在嘗試從DataReader中獲取任何內容之前,應該調用Read並檢查返回值。如果爲false,則查詢沒有返回任何內容。大量的例子。 – Steve

+0

事實上,你*必須*調用讀取來前進到第一行(並且前進到任何後續行) –

+0

有很多SQL查詢的例子,而不是Sqlitre。你能幫忙嗎? – OPV

回答

2

Afte r調用ExecuteReader需要調用Read以定位數據集的第一條記錄。 Read返回true/false以通知您是否有要讀取的記錄。所以,你的代碼更改爲

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 
} 

說,記住,如果你想要一個像你在查詢必須從單行檢索只是一列,然後它是更好,而不是使用的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 
} 
的ExecuteScalar
+0

Thak you,hw to返回所有數據:'if(reader.Read()) return reader.GetString(0);'?那通過列名得到價值之後? – OPV

+0

只是'返回閱讀器'? – OPV

+0

您的示例返回零或1條記錄。你的意思是什麼_所有data_? – Steve

相關問題