2012-09-26 66 views
19

我想弄清楚如何檢查我的SqlDataReader是否爲空或沒有行(表示保留不存在),然後顯示一個消息框。出於某種原因,當我調試一次它遇到While dr.Read())代碼時,如果它沒有返回結果,它將跳出。如何檢查SQLDataReader是否沒有行

我試圖把這個代碼在幾個不同的地點,但沒有人可以關火消息框,如果沒有記錄返回

if (dr.GetValue(0) == DBNull.Value || !dr.HasRows) 
{ 
    MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
} 
else 
{ 
    (read records) 
} 

我的代碼...

try 
{ 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand cmd = con.CreateCommand()) 
     { 
     con.Open(); 
     cmd.CommandText = "usp_StoredProcedureName"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@regnum", regnumber); 

     using (SqlDataReader dr = cmd.ExecuteReader()) 
     { 
      //Loop through all the rows, retrieving the columns you need. 
      while (dr.Read()) 
      { 
       lblConf.Text = dr.GetValue(0).ToString(); 
       lblName.Text = dr.GetValue(1).ToString() + "," + dr.GetValue(2); 
       lblCompany.Text = dr.GetValue(3).ToString(); 
       lblStatus.Text = dr.GetValue(4).ToString(); 
      } 
     } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Can not open connection! "); 
} 
+0

保持你的循環的方式,但它周圍包裹If語句來檢查是否(dr.HasRows){} – MethodMan

回答

31
if(dr.HasRows) 
{ 
    // .... 
} 
else 
{ 
    MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
} 

SqlDataReader.HasRows Property

+0

感謝這工作我使用hasrows屬性只是使用它我猜錯了。 – Tim

2

The HasRows property可能會幫助你。

屬性值

類型:如果SqlDataReader中包含一個或多個 行System.Boolean真實的;否則爲false。

3

添加到您的代碼來檢查:

sqlCommand cmd = new sqlCommand(); 
SqlDataReader dr = cmd.ExecuteReader(); 

if(dr.HasRows) 
{ 
    while(dr.Read()) 
    { 
     //code 
    } 
} 
1

出於某種原因,當我調試,一旦碰到它走出了while dr.Read()代碼,如果它沒有返回結果

我想你在這裏看到的是SQLDataReader.Read()返回false如果沒有下一個,或在這種情況下,第一個記錄要讀取。

與其他人一樣,使用HasRows屬性來確定結果集中是否有任何行。根據您需要完成的工作,您可能需要利用Read()確實第一次調用空結果集時返回false這一事實。