C#SqlCeDataReader rdata字段计数
本文关键字:字段 rdata C#SqlCeDataReader | 更新日期: 2023-09-27 17:58:30
我正在尝试查看数据库中是否存在ID,在本例中是vetID。
为了查看SQL查询的结果是否成功,我尝试使用rdata。FieldCount
即使输入ID(变量i)为=-400(数据库中不存在的ID号),FieldCount似乎总是返回11。我也尝试过其他不可能的数字,比如100或800(数据库中只有1-5个项目)
var mySQLCommand = new SqlCeCommand("SELECT * FROM vets WHERE vetID = @ID", dbCon);
mySQLCommand.Parameters.AddWithValue("ID", i);
SqlCeDataReader rdata = mySQLCommand.ExecuteReader();
if (rdata.FieldCount >= 1)
{
MessageBox.Show(" HAS ROWS "); go = true;
}
else
{
MessageBox.Show("NO ROWS RETURNED");
}
MessageBox.Show("rdata FieldCount " + rdata.FieldCount + " i has value " + i);
有没有更优雅的方法来检查ID在数据库中是否仍然有效并且没有被删除?
好的。。在你叫我愚蠢之前。。。我猜FieldCount正是返回Query的FieldCount,而不是FieldCount。。。doh。。。
但问题仍然存在,是否有一种优雅的方法可以知道ID是否仍在数据库中?
FieldCount总是返回11,因为(我假设)表中有11列。
更好的方法是:
var sql = new SqlCeCommand("select top 1 vetid from vets where vetid = @id", dbCon);
sql.Paramaters.AddWithValue("id", i);
if (null != mySqlCommand.ExecuteScalar())
{
// ID exists
}
如果使用数据读取器,则无法使用fieldcount获取行计数。但如果你想让查询保持原样,你会这样做:
var mySQLCommand = new SqlCeCommand("SELECT * FROM vets WHERE vetID = @ID", dbCon);
mySQLCommand.Parameters.AddWithValue("ID", i);
SqlCeDataReader rdata = mySQLCommand.ExecuteReader();
if (rdata.read() )
{
MessageBox.Show(" HAS ROWS ");
go = true;
}
else
{
MessageBox.Show("NO ROWS RETURNED");
}
MessageBox.Show("rdata FieldCount " + rdata.FieldCount + " i has value " + i);
另一种检查方法是使用select count(*)
来查看它是否在表中,如果它不存在,则为0。
var mySQLCommand = new SqlCeCommand("SELECT count(*) FROM vets WHERE vetID = @ID", dbCon);
mySQLCommand.Parameters.AddWithValue("ID", i);
SqlCeDataReader rdata = mySQLCommand.ExecuteReader();
int rowCount = 0;
if ( rdata.read() ) {
rowCount = rdata[0];
}
sql读取器只是一个正向读取器,因此您无法从属性中获取行数。FieldCount
是当前记录中的列数。获取返回的行数的唯一方法是将它们全部读入,或者提前运行count
查询(这可能不安全并发)
尝试使用HasRows
属性:
if (rdata.HasRows)
{
MessageBox.Show(" HAS ROWS "); go = true;
}
else
{
MessageBox.Show("NO ROWS RETURNED");
}