2014-07-24 1 views
0

고객 번호가 모두 숫자 일 때 작동하는 코드가 있습니다. 따라서 고객 번호가 알파로 추가되어 ""nvarchar 값의 변환 '4000545398'이 정수 열을 오버플로했습니다. 최대 정수 값 초과 "오류는210 만 개가 넘는 것을 알고 있습니다 ... 내 문제 4000545398은 테이블 shipper_sii [nvarchar (10)]의 첫 번째 레코드에있는 많은 숫자입니다. 다음과 같이 내 테이블Nvarchar casting as integer error ... 정수 열을 사용하지 않을 때

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

사람은 나에 대한 수정이 ...

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)) 

내 선언

은 ...입니까? 나는 ... 나는 그것의 나의 참여 확신합니다,하지만 난 난처한 상황에 빠진하고 여기에 내 머리 ... 를 긁적하고

' 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-parameter를 사용하지 않습니까? –

답변

1

당신은하지만,과, 이것은 Carton1 변수 주위에 따옴표를 요구하는 문자열 연결,이 오류의 종류와 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 필드가를 피하기 위해 매개 변수화 된 쿼리를 사용하므로합니다 매개 변수가있는 쿼리를 사용하면이 문제를 피할 수 있습니다.

관련 문제