Tentativo di leggere non valido quando non sono presenti dati

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; } 

Quando eseguo il debug fino alla riga 7, va bene, ma dopo di ciò dr dride un’eccezione: Invalid attempt to read when no data is present. Questo non è ansible in quanto ho dati nella tabella con username = sumant. Per favore dimmi se l’affermazione “se” è corretta o no ………

E come faccio a rimuovere l’errore ??

Devi chiamare DataReader.Read per recuperare il risultato:

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

DataReader.Read() restituisce un bool indica se ci sono più blocchi di dati da leggere, quindi se hai più di 1 risultato, puoi fare:

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

Devi chiamare dr.Read() prima di tentare di leggere qualsiasi dato. Questo metodo restituirà false se non c’è nulla da leggere.

Vorrei verificare se SqlDataReader ha restituito per prime le righe:

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

Ho appena avuto questo errore, stavo chiamando dr.NextResult() invece di dr.Read() .

Ho usato il codice qui sotto e ha funzionato per me.

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

Stavo avendo 2 valori che potrebbero contenere valori nulli.

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

risolto il problema