2012-09-26 20 views
19

Tôi đang cố gắng tìm ra cách kiểm tra xem SqlDataReader của tôi có rỗng hay không có hàng (nghĩa là đặt chỗ không tồn tại) và sau đó hiển thị hộp thư. Đối với một số lý do khi tôi gỡ lỗi một khi nó chạm vào mã While dr.Read()) nó bước ra nếu nó không có kết quả trả về.Làm thế nào để kiểm tra xem SQLDataReader không có hàng

Tôi đã thử đặt mã này trong một vài địa điểm khác nhau nhưng không ai dường như bắn ra các bảng thông báo nếu không có hồ sơ được trả về

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

Mã của tôi ...

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

Giữ vòng lặp của bạn theo cách của nó nhưng bọc một tuyên bố nếu xung quanh nó để kiểm tra xem (dr.HasRows) {} – MethodMan

Trả lời

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

SqlDataReader.HasRows Property

+0

Cảm ơn điều này làm việc tôi đã sử dụng tài sản hasrows chỉ sử dụng nó sai tôi đoán. – Tim

2

The HasRows property có thể giúp bạn.

Property Value

Loại: System.Boolean true nếu SqlDataReader chứa một hoặc nhiều hàng; ngược lại.

3

Thêm phần này vào mã của bạn để kiểm tra:

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

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

Đối với một số lý do khi tôi gỡ lỗi một lần nó chạm vào Mã while dr.Read() nó bước ra nếu nó không có một kết quả lợi nhuận

Tôi nghĩ rằng những gì bạn đang thấy ở đây là SQLDataReader.Read() trả lại false nếu không có lần tiếp theo hoặc trong trường hợp này là bản ghi đầu tiên cần đọc.

Khi người khác đã phản hồi, hãy sử dụng thuộc tính HasRows để xác định xem bạn có bất kỳ hàng nào trong tập hợp kết quả không. Tùy thuộc vào những gì bạn cần hoàn thành, bạn có thể muốn tận dụng lợi thế của thực tế là Read() thực sự trả lại false lần đầu tiên được gọi cho tập kết quả trống.

Các vấn đề liên quan