2014-03-27 3 views
0

내 데이터 집합에서 단 5 문자 인 기본 키에 선행 0을 추가하려고합니다. 기본 키는 6 자이며 앞에 오는 0은받는 Excel 파일에서 잘립니다. 아래의 명령문에서 앞의 0을 추가하고 싶지만 "CONVERT"기능을 인식 할 수 없습니다. 나는 아직도 새롭고 사용할 비슷한 기능을 모른다. 귀하의 도움을 크게 주시면 감사하겠습니다. DataGridView에 나를 그 여분의 제로가 발생 확인하기 위해 데이터 테이블 속에있는 것을 볼 수 있습니다OLEDB 명령문에서 앞에 0을 추가하십시오.

Dim sqlCon As New SqlConnection("Server=MyServer;Database=MyDatabase;User Id=xxx;Password=xxxxxx") 
     sqlCon.Open() 


     Dim excelCmd2 As New System.Data.OleDb.OleDbCommand("SELECT (SELECT RIGHT('000000'+CONVERT(VARCHAR,[Primary #]),6)) AS [Primary #],[Gourmet #],[Unit] FROM [" + sheetName + "]", con) 
     Dim excelRead As New System.Data.OleDb.OleDbDataAdapter() 
     Dim dt2 As New DataTable() 
     excelRead.SelectCommand = excelCmd2 
     excelRead.MissingSchemaAction = MissingSchemaAction.AddWithKey 
     excelRead.Fill(dt2) 
     DataGridView1.AutoGenerateColumns = True 
     DataGridView1.DataSource = dt2 
     DataGridView1.Refresh() 

아래

("SELECT (SELECT RIGHT('000000'+CONVERT(VARCHAR,[Primary #]),6)) AS [Primary #],[Gourmet #],[Unit],FROM [" + sheetName + "]", con) 

전체 코드입니다.

Using dataRead As System.Data.OleDb.OleDbDataReader = excelCmd2.ExecuteReader() 
       If dataRead.HasRows() Then 
        While dataRead.Read() 
         Dim sqlCmd As New SqlCommand 
         sqlCmd.Connection = sqlCon 
         sqlCmd.CommandType = CommandType.Text 
         sqlCmd.CommandText = sqlUpdate 

         sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #")) 
         sqlCmd.Parameters.Add("@spc", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Gourmet #")) 
         sqlCmd.Parameters.Add("@unit", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Unit")) 
         sqlCmd.ExecuteScalar() 
        End While 
       End If 
      End Using 
+0

데이터베이스의 '[Primary #]'열의 유형은 무엇입니까? 데이터베이스 프로그램이란 무엇입니까? 기본 키는 실제로 6 자 여야합니까? –

+0

[기본 #]이 Excel 파일에서 나오고 파일에 따라 텍스트 또는 숫자 형식입니다 (보낸 사람이 일치하지 않습니다). varchar (6)로 SQL 데이터베이스에 업로드합니다. – Infinite8Self

+1

나는 값을 그대로 읽고,'Cstr (primaryId) .PadLeft (6, "0"c)'를 사용하여 값을 데이터베이스에 삽입하기 전에 문자열로 변환하는 것이 좋습니다. DataGridView가 필요합니까? - 그렇지 않다면, 그것은 단지 복잡한 일입니다. –

답변

1

, 당신은

sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #").PadLeft(6, "0"c) 

이 당신의 선택을 의미하는 필요한 선행 제로를 추가 할

sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #") 

에 당신의 라인을 변경할 수 있습니다 명령이

"SELECT [Primary #], [Gourmet #], [Unit] FROM [" & sheetName & "]" 

으로 단순화되었습니다. (VB.NET의 문자열 연결 연산자는입니다.이 아닌입니다.)

+0

실제 코드 인 경우에 대비하여'FROM' 이전에 가짜 쉼표를 제거했습니다. –

+0

내 코드의 매개 변수 추가 부분에서 수정 사항이 훌륭하게 처리되었습니다. 나는 {+}와 {+}의 차이점을 이해하지 못합니다. 그러나 {+}를 사용하여 문자열을 연결하는 데 문제가 없었습니다. 나는 이것을 더 연구 할 것이다. 고마워 친구 야! – Infinite8Self

0

사용 Padleft 앞에 0을 추가 : 이후 내 excelCmd2에서 데이터 세트는 모든 열이 동일한 매개 변수를 내 SQL 테이블에서 않도록 있습니다.

primaryId.padleft(6, "0") 

또는 경우

이미

primaryid.tostring.padleft(6, "0") 

당신이 당신의 명령 텍스트에 패딩 버전을 사용하고자하기 때문에, 당신은 아마를 개최 임시 문자열 변수를 만들 것이다 문자열로 포맷되지는 새로운 가치, 단지 코드 가독성을 돕기 위해. 그것은 앞에 0이 추가되는 것을 볼 수 있도록하지는 않지만

+0

내 코드에서 이것을 어떻게 사용하는지 모르겠습니다. 데이터 세트의 내 열 이름은 [기본 #]입니다. 내 Select Command의 열 이름 [Primary #] 아래의 모든 것을 어떻게 칠합니까? 아니면 설명하는 방식으로 모든 것을 채 웁니까? – Infinite8Self

+0

변환을하지 않고 정상적으로 Excel 파일에서 5 자리 숫자를 읽습니다. 그런 다음 INSERT 문을 수행 할 때 "primaryId.padleft (6,"0 ") 값을 삽입합니다. –

관련 문제