如何使用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);
它抛出我打破例外“没有当前行”
答
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
在尝试从DataReader中获取任何内容之前,应该调用Read并检查返回值。如果为false,则查询没有返回任何内容。大量的例子。 – Steve
事实上,你*必须*调用读取来前进到第一行(并且前进到任何后续行) –
有很多SQL查询的例子,而不是Sqlitre。你能帮忙吗? – OPV