कोई डेटा मौजूद नहीं होने पर पढ़ने का अमान्य प्रयास


80
    private void button1_Click(object sender, EventArgs e)
    {
        string name;
        name = textBox5.Text;
        SqlConnection con10 = new SqlConnection("con strn");
        SqlCommand cmd10 = new SqlCommand("select * from sumant where username=@name");
        cmd10.Parameters.AddWithValue("@name",name);
        cmd10.Connection = con10;
        cmd10.Connection.Open();//line 7
        SqlDataReader dr = cmd10.ExecuteReader();
    }

    if ( textBox2.Text == dr[2].ToString())
    {
        //do something;
    }

जब मैं लाइन 7 तक डिबग करता हूं, तो यह ठीक है, लेकिन इसके बाद डॉ एक अपवाद फेंकता है: Invalid attempt to read when no data is present. यह संभव नहीं है क्योंकि मेरे पास उपयोगकर्ता नाम = सारांश के साथ तालिका में डेटा है। कृपया मुझे बताएं कि क्या 'यदि ’कथन सही है या नहीं ………

और मैं एरर कैसे निकालूं ??

जवाबों:


176

आपको DataReader.Readपरिणाम प्राप्त करने के लिए कॉल करना होगा:

SqlDataReader dr = cmd10.ExecuteReader();
if (dr.Read()) 
{
    // read data for first record here
}

DataReader.Read()एक रिटर्न boolका संकेत यदि डेटा की अधिक ब्लॉक को पढ़ने के लिए कर रहे हैं, ताकि आप अधिक से अधिक 1 परिणाम है, तो आप कर सकते हैं:

while (dr.Read()) 
{
    // read data for each record here
}

4
इसके अलावा, आप dr.sBDNull (0) का उपयोग करके डेटा के लिए अशक्त होना चाह सकते हैं
— लुइस रॉबल्स

इस उत्तर को बेहतर बनाया जा सकता है, पहला स्निपेट रिटर्न वैल्यू का ध्यान नहीं रखता है dr.Read()। इसलिए यदि क्वेरी रिकॉर्ड वापस नहीं करती है तो त्रुटि समान है: "जब कोई डेटा मौजूद नहीं है तो पढ़ने का अमान्य प्रयास"। इसके बजाय उपयोग करें if(dr.Read()){....}(या नीचे के रूप में एक लूप)।
— टिम श्मेल्टर

17

dr.Read()किसी भी डेटा को पढ़ने का प्रयास करने से पहले आपको कॉल करना होगा। अगर पढ़ने के लिए कुछ नहीं है तो वह तरीका गलत हो जाएगा।


9

मेरे पास बस यह त्रुटि थी, मैं dr.NextResult()इसके बजाय कॉल कर रहा था dr.Read()।


1
बस एक ही बात थी! वह एक निराशाजनक घंटा था!
— जोनिरा

8

मैं यह देखने के लिए जाँच करूंगा कि क्या SqlDataReader में पंक्तियाँ पहले हैं:

SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
   ...
}

4
मेरे मामले में मेरे पास यह था, और हालांकि मैं इस जगह का उपयोग कर रहा हूं, इस विशेष परिदृश्य में जिसने इस त्रुटि का उत्पादन किया, यह त्रुटि को बुदबुदाती से रोक नहीं पाया। मेरे क्वेरी परिणामी में पंक्तियाँ हैं, और फिर भी पाठक के पास कोई डेटा नहीं है। मैं वास्तव में समझ नहीं पा रहा हूं कि क्या हो रहा है। क्वेरी और मापदंडों को स्वयं सत्यापित करें।
— बैरी

3

मैंने नीचे दिए गए कोड का उपयोग किया और यह मेरे लिए काम करता है।

String email="";
    SqlDataReader reader=cmd.ExecuteReader();
    if(reader.Read()){
        email=reader["Email"].ToString();
    }

String To=email;

2

मेरे पास 2 मान थे जिनमें शून्य मान हो सकते हैं।

while(dr.Read())
 {
    Id = dr["Id"] as int? ?? default(int?);
    Alt =  dr["Alt"].ToString() as string ?? default(string);
    Name = dr["Name"].ToString()
 }

इस मुद्दे को हल किया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.