首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# SqlCeDataReader rdata FieldCount

C# SqlCeDataReader rdata FieldCount
EN

Stack Overflow用户
提问于 2011-06-06 00:05:12
回答 4查看 3.3K关注 0票数 2

我试图查看数据库中是否存在ID --本例中是vetID。

为了查看SQL查询的结果是否成功,我尝试使用rdata.FieldCount

即使输入ID (变量i)为= -400 (数据库中不存在的id号),FieldCount似乎总是返回11。我也尝试过其他不可能的数字,如100或800 (数据库中只有1-5项)。

代码语言:javascript
复制
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是否仍然存在?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-06 00:07:28

如果使用的是数据中心,则无法使用字段计数获得行计数。但是,如果您想以同样的方式离开查询:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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];
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-06 00:18:16

FieldCount总是返回11,因为(我假设)表中有11列。

更好的办法是:

代码语言:javascript
复制
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
}
票数 4
EN

Stack Overflow用户

发布于 2011-06-06 00:11:17

sql读取器仅是前向读取器,因此无法从属性中获取行数。FieldCount是当前记录中的列数。获取返回的行数的唯一方法是在手动之前读取所有行或运行count查询(这可能不是并发安全的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6246786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档