4

私のコード:

string sqlQuery1 = "select * from employees where depid=6";
SqlDataReader Dr1 = dbconn.RunQueryReturnDataReader(sqlQuery1);

if(Dr1.read()) {    //or if (Dr1["empname"] != DBNull.Value)

            while (Dr1.Read())
            {        
                Label1.Text = Dr1["empname"].ToString();  
                Label2.Text = Dr1["empdes"].ToString(); 
                ...

            }
            Dr1.Close();
 }
 else {
            Label1.text = "defaultValue";
            Label2.text = "defaultValue";
            ...
 }

SqlDataReader に表示するレコードがないことを確認したいだけです。レコードがない場合、ラベルは私が事前に割り当てたデフォルト値を表示するか、ラベルにレコード表示データリーダー値がある場合。(SqlDataReader に 1 つの recode があるか、または norecord のみがあると仮定します)

最初のデータリーダーがRowを持っているかどうかを確認するにはどうすればよいですか?

上記のコードのように2つの方法を試しました。

  1. if(Dr1.read()) - この方法でうまくいきます。しかし、Ifステートメントを実行した後は、 read() がポインターを増加させるため、ラベルに表示する値がありません。その結果、label1、Label2..何も表示されません。

  2. if (Dr1["empname"] != DBNull.Value)

    この方法では、Sqldatareader に norow がある場合に例外が生成されます。

error: System.InvalidOperationException: Invalid attempt to read when no data is present

私を助けてください。TX

4

2 に答える 2

9

試す...

if(Dr1.HasRows)
{
   //....
}
于 2012-06-02T05:07:24.287 に答える
5
if (Dr1 == null || !Dr1.HasRows) {
    // Do something
}
于 2012-06-02T05:57:16.983 に答える