有没有办法检查我是否处于最后一条记录?谢谢
有没有办法检查我是否处于最后一条记录?谢谢
使用这个方法来识别和处理结果中的最后一行:
if (reader.Read())
{
var loop = true;
while (loop)
{
//1. Here retrive values you need e.g. var myvar = reader.GetBoolean(0);
loop = reader.Read();
if (!loop)
{
//You are on the last record. Use values read in 1.
//Do some exceptions
}
else {
//You are not on the last record.
//Process values read in 1., e.g. myvar
}
}
}
if (reader.Read())
中,你将读取器设置到了第一行记录,然后又使用了 loop = reader.Read()
,这将直接将读取器设置到第二条记录。不过,你的解决方案提供了如何解决问题的正确模式。 - Thorsten Dittmarlist[list.Count-1]
。当然,缓冲前一行甚至更便宜,但更复杂。 - Marc GravellSqlDataReader
的方法:SqlDataReader reader = ...;
while(reader.Read())
{
// the reader will contain the current row
}
读取器中没有任何内容告诉您这是最后一行。
如果您仍然需要进入最后一行,可以将该行数据存储在单独的变量中,在退出循环后获取该数据。
其他替代方案包括:
另一种可能性是将信息放入数据集中。
您正在使用查询读取数据。我们称之为q。请改用此查询:
select row_number() over (order by (select NULL)) as seqnum,
count(*) over (partition by null) as numrecs
q.*,
from (<q>) q
order by seqnum
现在最后一条记录的序列号为numrecs,您可以在应用程序中进行测试。
顺便说一下,这假定您以无序方式检索数据。如果您想要排序,请将条件放入row_number()的“order by”子句中。
如果不重复自己(即两次获取记录),则无法这样做。以下是一种更短的方法
System.Data.DataTable dt = new System.Data.DataTable();
dt.Load(myDataReader);
int recordCount = dt.Rows.Count;
if(recordCount > 0)
{
if(dt.Rows[recordCount-1]["username"] == "wrong value")
throw new Exception("wrong value");
}
我随手写了这个,所以它没有经过测试,但这就是方法。
正如您所知,SQLDataReader没有“行数”属性。您只需读取直到EOF。
然而,DataSet确实有。也许您可以使用DataAdapter和某种数据集或表进行替换: