2016-03-31 13 views
0

VB.NET und SQL Server 2014. Dieser Code produzieren einen seltsamen Fehler. HasRows ist WAHR, aber die Auswahl ist leer, und die Auswahl sollte nicht leer sein, da viele Datensätze in der Tabelle die Bedingungen where erfüllen.SqlDataReader und Select funktionieren nicht richtig

Wenn ich das select direkt in SQL Server auswählen, funktioniert alles einwandfrei. Die anno und nomediv Parameter sind korrekt.

try 
    connection1.Open() 
    sqlcmd = String.Format("select distinct HomeTeam from tutto WHERE anno='{0}' AND div= '{1}' AND HomeTeam <> 'NULL'", annocampionato, nomediv(i)) 

    SetSqlCommand(sqlcmd, 1) 
    sqlreader1 = sqlcommand1.ExecuteReader() 

    Do While sqlreader1.Read() 
     If sqlreader1.HasRows Then ' 
       nomesquadra = RTrim(sqlreader1.GetString(0)) 
       ...... 
     End If 
    Loop 

    connection1.Close() 

    Catch ex As Exception 
    MsgBox(ex.Message) 
    connection1.Close() 
End Try 

versuchen zu erklären, besser: außer Reichweite Ausnahme tritt das Programm in die WHILE Schleife und sqlreader1.hasrows ist TRUE aber sqlreader1.GetString(0) Return Index. Wenn ich den Befehl in SELECT * FROM tutto ändere, ist das Ergebnis dasselbe.

Vielen Dank im Voraus

Pamela

P. S. Ich werde vermeiden, die Zeichenfolge concat für die Release-Version

+0

Bitte posten ** alle ** Ihres Codes. – Dai

+4

Es ist nicht sinnvoll, "If sqlreader1.HasRows Then" innerhalb der While-Schleife zu haben ... die while-Schleife würde niemals eingegeben werden, wenn Sie keine Ergebnisse hätten. – GendoIkari

+2

Verwenden Sie auch parametrisierte Abfragen, NOT-String-Concartentation oder String-Formatierung. – Dai

Antwort

0

zu verwenden Ich denke, Ihre Logik ist rückwärts. Zugegeben, die Dokumentation ist dünn.

Wenn Sie eine Zeile erhalten dann passiert folgendes:

Do While sqlreader1.Read()

gibt true zurück und liest die Daten.

Wenn sqlreader1.HasRows Then '

false zurück, weil es keine Daten mehr.

Es macht keinen Sinn, HasRows in der Schleife zu überprüfen. In der Tat macht es keinen Sinn, es überhaupt zu überprüfen - einfach die Read() -Methode durchlaufen.

Verwandte Themen