如何使用sqCommand.ExecuteReader()返回数据;?

问题描述:

我有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

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