2014-07-24 36 views
0

我有一段代碼,當我的客戶號碼都是數字時工作。所以客戶號碼已被添加,現在是阿爾法,我得到一個「的nvarchar值'4000545398溢出'溢出int列。超過最大整數值」錯誤,我知道是超過210萬等... 我的問題位於那個數字4000545398是表shipper_sii [nvarchar(10)]的第一個記錄中的很多數字。是Nvarchar鑄造整數錯誤...當沒有整數列使用

列在我的表如下...

custaddr - name (nvarchar (60)), cust_num (nvarchar(7)) 
co - cust_num (nvarchar(7)), co_num (nvarchar(10)) 
shipper_sii - co_num (nvarchar(10)), lot (nvarchar(15)) 

我的聲明是...

Dim Carton1 As String 
Dim dbCustName As String 
Dim dbCustNum As String 

任何人有一個修復給我嗎?我抓我的頭在這裏... 我敢肯定它在我加盟,但我難倒...

' Get Customer Name 

Using connObj2 As New SqlClient.SqlConnection("server=Server;database=App;uid=sa;pwd=password;") 
    Using cmdObj2 As New SqlClient.SqlCommand("SELECT c2.name, c2.cust_num from custaddr as c2 INNER JOIN co as c1 ON (c2.cust_num = c1.cust_num) INNER JOIN shipper_sii as s1 on (c1.co_num = s1.co_num) WHERE lot = " & Carton1, connObj2) 
    connObj2.Open() 
    Using readerObj2 As SqlClient.SqlDataReader = cmdObj2.ExecuteReader 
     'This will loop through all returned records 
     While readerObj2.Read 

      dbCustNum = readerObj2("cust_num").ToString 
      dbCustName = readerObj2("name").ToString 
      'handle returned value before next loop here 

     End While 
    End Using 
    connObj2.Close() 
    End Using 
End Using 

我的錯誤在「當readerObj2.Read」彈出。

+1

當你到達這裏時,'Carton1'的價值是多少?你爲什麼不使用sql參數? –

回答

1

您應該使用參數化查詢,以避免這種錯誤的和Sql Injection問題

Dim cmdText = "SELECT c2.name, c2.cust_num from custaddr as c2 " & _ 
       "INNER JOIN co as c1 ON (c2.cust_num = c1.cust_num) " & _ 
       "INNER JOIN shipper_sii as s1 on (c1.co_num = s1.co_num) " & _ 
       "WHERE lot = @car" 
Using cmdObj2 As New SqlClient.SqlCommand(cmdText, connObj2) 
    cmdObj2.Parameters.AddWithValue("@car", Carton1) 
    ..... 

這裏lot是的NVarChar場,因此,在一個字符串連接,這需要各地Carton1變量的報價,但一個參數化查詢,避免了這個問題。