C# 数据库中想判断是否读取到数据怎么办?

现在做了一个程序,在读取数据库的时候想判断一下是否能够读取到数据库中的数据,开始的时候用的是dataReader .Read()判断的,不过每次读取都少了一个数据。怎么样才能正常判断之后正常读取呢?
开始时候程序是这样的
string selectStr = "select * from [table] where username= 'name'";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand comm = new SqlCommand(selectStr, conn);
object[] data = new object[12];
conn.Open();
SqlDataReader reader = comm.ExecuteReader();

if (reader.Read())
{
while (reader.Read())
{
reader.GetValues(data);
dataGridView1.Rows.Add(data);
}
}
conn.Close();

在执行数据库查询后,读取结果的时候没有判断结果集指针是否越界。
比如只查出一条数据,结果你就读两次结果,读的时候指针是会向下走,读一条,就指到下一条。
结果集第一条数据的前边一条是BOF,B就是Begin的首字母,最后一条的后边是EOF。
结果集查回来,指针通常指向BOF,如果你写arr["字段名"]就会出错,应该先读一次,并且读的时候要判断是否读取成功,如果结果集为空,读的时候就会从BOF直接指向EOF,这样读取会失败。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-16
1 通过System.DBNull判断
DataTable dt; //假设字段为name, dt已经保存了数据
dt.rows[0]["name"] == System.DBNull.Value; //判断第一行数据的name字段是否为空

2 通过IsNull判断
DataTable dt; //假设字段为name, dt已经保存了数据
dt.rows[0].IsNull("name"); //判断第一行数据的name字段是否为空

3 通过ToString() 判断
DataTable dt; //假设字段为name, dt已经保存了数据
dt.rows[0]["name"].ToString() == ""; //判断第一行数据的name字段是否为空本回答被网友采纳
第2个回答  2010-11-03
少读一个数据的原因是,程序中if语句多判断了一次。
reader.Read()方法是让reader读取下一条数据,有数据则返回true,否则返回false。
程序中if让reader读取第一条,while中又让reader下移一条,导致第一条数据就丢失了。
因此只要while (reader.Read())就可以了,外层不用if再判断一次。

如果需要判断reader是否有数据,好像有一个HasRows属性,或者是其他的名字。
第3个回答  2010-11-03
一般是用Read方法判断
比如:
while(dataReader .Read()){
// 处理当前记录
}
上面这样不可能漏读记录的
第4个回答  2010-11-03
SqlDataReader reader = DBHelper.GetReader(sql, new SqlParameter("@Id", id));
if (reader.Read())
{
UserRole userRole = new UserRole();

userRole.Id = (int)reader["Id"];
userRole.Name = (string)reader["Name"];

reader.Close();

return userRole;
}
调用的时候去判断 if(userRole == null){ //..}
相似回答