2016-05-22 11 views
0

Ich schreibe eine Anwendung für die Arbeit mit meiner DB (auf Microsoft SQL Server 2014). Ich habe diesen Code:Die Konvertierung des Nvarchar-Wert übergelaufen eine int-Spalte VB.Net

Private Sub Ucitaj() 
    Try 
     Dim command As New SqlCommand 
     command.Connection = Me.conn 
     command.CommandText = "select * from zaposleni where jmbg=" & Me.jmbg 
     Dim reader As SqlDataReader 

     reader = command.ExecuteReader 
     reader.Read() 

     Me.TextBox2.Text = reader("ime") 
     Me.TextBox3.Text = reader("prezime") 
     Me.TextBox4.Text = reader("br_rac") 
     Me.TextBox5.Text = reader("tel") 
     Me.TextBox6.Text = reader("datum_zap") 

     reader.Close() 
    Catch ex As Exception 

    End Try 
End Sub 

In Zeile: reader.Read(), führt er die folgenden Fehler: { "Die Umwandlung des nvarchar Wertes '1008994254963' einen int Spalt überflutete"}

Übrigens ist '1008995254963' der Wert in der Spalte 'jmbg' meines ersten Eintrags in der Tabelle. Ich nehme an, wenn es einen Vergleich macht, versucht es das in int umzuwandeln. Mein Datentyp in der Datenbank ist jedoch nvarchar (20). Warum passiert das? Sollte es nicht als eine Schnur behandelt werden? Warum versucht es, es in int zu konvertieren, wenn ich grundsätzlich Wörter (nicht nur Ziffern) in diese Spalte schreiben kann und wenn der Datentyp kein int ist? Vielen Dank im Voraus

Antwort

4

Das Problem dort ist, dass Sie einen Literalwert in Ihrem SQL-Code verwenden und ihn nicht in einfache Anführungszeichen setzen. Wörtlicher Text MUSS in einfache Anführungszeichen eingeschlossen werden, damit Ihr Wert als Zahl und nicht als Text interpretiert wird. Das bedeutet, dass der Wert in der Spalte zum Vergleichen auch in eine Zahl konvertiert wird und für einen int zu groß ist, daher der Überlauf.

Das mag es wie die Lösung klingen, einige einfache Anführungszeichen hinzuzufügen, aber das ist eine schmutzige Lösung. Die richtige Lösung besteht darin, IMMER Parameter zu verwenden, um Werte in SQL-Code einzufügen. Dies bedeutet, dass Probleme wie diese und viele andere nicht auftreten.

command.CommandText = "select * from zaposleni where jmbg = @jmbg" 
command.Parameters.Add("@jmbg", SqlDbType.NVarChar, 20).Value = Me.jmbg 
+0

Vielen Dank! Sehr deutlich :) –

Verwandte Themen