2009-07-18 8 views
56
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 [email protected]"); 
     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; 
    } 

Kiedy debugowanie aż linii 7, to jest ok, ale po tym dr zgłasza wyjątek: Invalid attempt to read when no data is present. to nie jest możliwe, ponieważ mam dane w tabeli z nazwą użytkownika = sumant. Proszę mi powiedzieć, czy stwierdzenie "jeśli" jest prawidłowe, czy nie .........Nieprawidłowa próba odczytu, gdy dane nie występuje

Jak mogę usunąć błąd?

Odpowiedz

128

Trzeba zadzwonić DataReader.Read sprowadzić wynik:

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

DataReader.Read() zwraca bool ze wskazaniem, czy jest więcej bloki danych do odczytania, więc jeśli masz więcej niż 1 rezultatu, można zrobić:

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

Poza tym, może chcesz spróbować dla danych za pomocą dr.IsBDNull być zerowy (0) –

+0

Ta odpowiedź można poprawić, pierwszy fragment nie dbać o zwracana wartość 'dr.Read()'. Więc jeśli zapytanie nie zwraca rekordów, błąd jest taki sam: "Nieprawidłowa próba odczytu, gdy nie ma danych". Zamiast tego użyj 'if (dr.Read()) {....}' (lub pętli, jak poniżej). –

13

Przed próbą odczytania danych należy zadzwonić pod numer dr.Read(). Ta metoda zwróci wartość false, jeśli nie ma nic do odczytania.

6

Chciałbym sprawdzić, czy ma SqlDataReader wiersze zwrócone pierwsze:

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

w moim przypadku miałem to i chociaż używałem tego gdzie indziej, w tym szczególnym scenariuszu, który spowodował ten błąd, NIE powstrzymało to błędu od bulgotania. Moje wynikowe zapytanie ma wiersze, a jednak czytelnik nie ma danych. Naprawdę nie rozumiem, co się dzieje. Zweryfikowałem zapytanie i parametry. – Barry

6

Właśnie miałem ten błąd, dzwoniłem dr.NextResult() zamiast dr.Read().

+1

po prostu miał dokładnie to samo! To była frustrująca godzina! –

1

Użyłem kodu poniżej i zadziałało to dla mnie.

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

String To=email; 
0

Miałem 2 wartości, które mogą zawierać wartości puste.

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

rozwiązany

Powiązane problemy