我试图查看数据库中是否存在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恰恰是返回查询的FieldCount而不是FieldCount .哈..。
但是问题仍然存在,是否有一种优雅的方法可以知道数据库中的ID是否仍然存在?
发布于 2011-06-06 00:07:28
如果使用的是数据中心,则无法使用字段计数获得行计数。但是,如果您想以同样的方式离开查询:
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];
}发布于 2011-06-06 00:18:16
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
}发布于 2011-06-06 00:11:17
sql读取器仅是前向读取器,因此无法从属性中获取行数。FieldCount是当前记录中的列数。获取返回的行数的唯一方法是在手动之前读取所有行或运行count查询(这可能不是并发安全的)。
https://stackoverflow.com/questions/6246786
复制相似问题