2013-01-07 15 views
17

फ़ंक्शन से पहले if (dr.HasRows) जोड़ने के लिए फायदेमंद है या नहीं। मेरा मतलब है, तकनीकी रूप से यदि इसमें पंक्तियां नहीं हैं तो यह पढ़ने वाला नहीं है, तो क्या इससे कोई फर्क नहीं पड़ता कि आपने इसे पहले चेक किया है?अगर मुझे SqlDataReader.HasRows को कॉल करना है, तो मैं SqlReader को कॉल कर रहा हूं।

using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
    if (dr.HasRows) 
    { 
     while (dr.Read()) 
     { 
      ....do stuff here 
     } 
    } 
} 

या इस अगर आप सिर्फ यकीन है कि यह प्रदान करने के लिए मूल्य हैं बना रहे हैं अनिवार्य रूप से सटीक एक ही बात करने जा रहा है ...

using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
    while (dr.Read()) 
    { 
     ....do stuff here 
    } 
}  
+2

यदि लाभ पर कोई और खंड था तो यह फायदेमंद होगा। यदि कोई पंक्ति नहीं है तो क्या आप विशेष हैंडलिंग चाहते हैं? –

उत्तर

13

नहीं .. यदि डेटारडर में कोई पंक्ति है या नहीं, तो (dr.HasRows) जांचना अनिवार्य नहीं है।

Read()झूठी वापस आ जाएगी अगर कोई अधिक पंक्तियों को लाने के लिए है, लेकिन Reader.HasRows इसलिए यह एक अच्छा अभ्यासReader.HasRows उपयोग करने के लिए किया जाएगा कि यह Read() से करता है के रूप में भी बहुत कुछ कह रहा है, क्योंकि अगर आप गलती से हो सकता है Read() के अलावा कुछ और करें जो अपवाद में पड़ सकता है।

+10

हैसरो के साथ सावधान रहें क्योंकि यह गलत हो सकता है जब() ** SqlException ** वापस करेगा क्योंकि आपके एसक्यूएल में कोई त्रुटि है या सम्मिलित करने पर डेटा बाधाओं का उल्लंघन है, आमतौर पर आपको यह जानने की ज़रूरत है कि वास्तव में कोई पंक्ति नहीं है या कोई त्रुटि है। –

+2

@IvanAkcheurov सही है। उनके उदाहरणों के अलावा, डेडलॉक पीड़ित के रूप में चुने जाने के कारण ही हैसरो का उपयोग करके जाना नहीं जाएगा - एसक्यूएलएक्सप्शन को तब तक नहीं फेंक दिया जाता है जब तक पढ़ा नहीं जाता है। – alexg

+0

ये दो टिप्पणियां आखिरकार बदलती हैं जो "अच्छी प्रैक्टिस" होनी चाहिए, यानी 'हैसरो() 'के साथ शॉर्ट-सर्किट' पढ़ें()' नहीं। इस कारण से, मैं जवाब नीचे मतदान कर रहा हूँ। –

1

मुझे लगता है कि यह ज्यादातर संग्रहित प्रक्रियाओं के लिए है जो हो सकता है या आपके पास डेटा (एक या अधिक परिणाम सेट नहीं हो सकता है) और यदि आप डेटा होने पर अन्य लूप (यानी हेडर/पाद लेख इत्यादि प्रारंभ करते हैं) की तुलना में अन्य सामान भी करते हैं तो यह पहले "जांचना" आसान होता है।

2

यह जांचना अनिवार्य नहीं है कि डेटा रीडर की पंक्तियां हैं (डॉ। हासरो)। यदि कोई और डेटा नहीं है, तो इस समय और लूप को तोड़ने पर अधिक डेटा पढ़ने और गलत होने पर रीड() विधि सही हो जाएगी।

-4

कोशिश

  string myconnection = "datasource= localhost;port=3306;username=root;password=root;"; 
      MySqlConnection myconn = new MySqlConnection(myconnection); 

      //MySqlDataAdapter mydata = new MySqlDataAdapter(); 
      MySqlDataReader myreader; 

      MySqlCommand SelectCommand = new MySqlCommand("select *from student_info.student_info where username= '" + textBox1.Text +" 'and password=' " + textBox2.Text +"';",myconn); 


      myconn.Open(); 

      myreader = SelectCommand.ExecuteReader(); 
      int count = 0; 
      if (myreader.HasRows) //returing false but i have 4 row 
      { 
       while (myreader.Read()) //returing false 
       { 
        MessageBox.Show("in button3"); 
        count = count + 1; 
       } 
      } 

आपकी राय की आवश्यकता

+0

पहले उपयोग की साइट पर चर घोषित करें, और कृपया 'उपयोग' कथन का उपयोग करें। Downvoted। –

5

सावधान रहें। HasRows() मेरी सीटीई क्वेरी के लिए झूठी रिटर्न देता है, भले ही पंक्तियां हैं (वास्तव में 437 पंक्तियां)।

संबंधित मुद्दे

 संबंधित मुद्दे