2016-05-22 30 views
0

我正在編寫一個應用程序以使用我的數據庫(在Microsoft SQL Server 2014上)。我有這樣的代碼:nvarchar值的轉換溢出了一個int列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 

在線路:reader.Read(),它引發以下錯誤:{ 「該nvarchar的值 '1008994254963' 的轉化溢出int列」}

順便說一下,'1008995254963'是表格中第一個條目的'jmbg'列中的值。所以我想,當它進行比較時,它會嘗試將其轉換爲int。但是,我在數據庫中的數據類型是nvarchar(20),那麼爲什麼會發生這種情況呢?它不應該把它當作一個字符串嗎?爲什麼它會嘗試將它轉換爲int,當我基本上可以在此列中寫入單詞(不僅是數字)並且數據類型不是int時?在此先感謝

回答

4

問題是您在SQL代碼中使用文字值,而不是用單引號包裝它。文字文本必須用單引號括起來,這樣你的值被解釋爲一個數字而不是文本。這意味着,爲了進行比較,列中的值也轉換爲數字,並且對於int來說太大,因此溢出。

這可能聽起來像解決方案是添加一些單引號,但這是一個骯髒的解決方案。正確的解決方案是始終使用參數將值插入到SQL代碼中。這樣做意味着不會出現像這樣的問題和其他問題。

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

謝謝!非常清楚 :) –

相關問題