如何检查 OleDbDataReader 是否为空?

How to check if OleDbDataReader is empty?

这是我根据 Class 字段值 select Maximum RollNo 使用的代码。 但是当Table中没有关于Class字段的数据时。然后就产生了Error。

using (var conn = new OleDbConnection(DatabaseObjects.ConnectionString))
            {
                conn.Open();
                command = new OleDbCommand("select max(RollNo) as Roll from Students where Class = '"+cmbClass.Text+"'", conn);
                OleDbDataReader dr = command.ExecuteReader();
                if (!dr.IsDBNull(0))
                {
                    while (dr.Read())
                    {
                        i = Convert.ToInt32(dr["Roll"]);
                    }
                }

InvalidOperation 异常 正在发生。如果 Table 中的数据可用,我想获取 RollNo 的值。如果 Table 中没有数据,我该怎么办?

你正在颠倒步骤:

  • 打开连接;
  • 检查是否有通信数据;
  • 检查值是否不为空;
  • 读取数据;

试试这个:

while (dr.Read())
   {
       if (!dr.IsDBNull(0))
          {
            i = Convert.ToInt32(dr["Roll"]);
          }
   }

当您只参加单个值时,使用 executeScalar 获取值;

  conn.Open();          
  command = new OleDbCommand("select isnull(max(RollNo),-1) as Roll from Students where Class = '"+cmbClass.Text+"'", conn);
  int rollNo = (int) command.ExecuteScallar();
  if(rollno !=-1)
  {
     // TODO :
  }