2012-03-31 5 views
0

사용자가 CSV 파일을 DataGrid로 가져 와서 해당 행을 Oracle의 테이블로 업데이트 할 수 있도록하는 VB.Net 응용 프로그램이 있습니다.Vb.Net 및 CSV 파일

여기까지 왔지만 작동하지 않는 것은 오류를 발생시키지 않습니다.

Private Sub Update_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles Update.Click 

    MsgBox("Saving...") 

    Dim table As New DataTable() 
    Dim BindingSource As New BindingSource() 
    BindingSource.DataSource = table 


    table.Columns.Add("ORDER_NO") 
    table.Columns.Add("LINE_ITEM_NO") 
    table.Columns.Add("CONTRACT") 
    table.Columns.Add("PART_NO") 
    table.Columns.Add("QTY_REQUIRED") 
    table.Columns.Add("QTY_PER_ASSEMBLY") 
    table.Columns.Add("RELEASE_NO") 
    table.Columns.Add("SEQUENCE_NO") 
    table.Columns.Add("ORDER_CODE") 
    table.Columns.Add("PART_OWNERSHIP") 

    Dim parser As New FileIO.TextFieldParser("C:\Documents and Settings\User\Desktop\solution.csv") 

    parser.Delimiters = New String() {","} ' fields are separated by comma 
    parser.HasFieldsEnclosedInQuotes = True 
    parser.TrimWhiteSpace = True 


    parser.ReadLine() 



Dim sConnectionString As String = "Data 
Source=MYSERVER.COM;User ID=MYNAME;Password=MYPASSWD;" 

Dim strSql As String = "INSERT INTO SHOP_MATERIAL_ALLOC_TAB(ORDER_NO, 
LINE_ITEM_NO, CONTRACT, PART_NO, QTY_REQUIRED, QTY_PER_ASSEMBLY, 
RELEASE_NO,SEQUENCE_NO,ORDER_CODE,PART_OWNERSHIP) VALUES (@ORDER_NO, 
@LINE_ITEM_NO,@CONTRACT,@PART_NO,@QTY_REQUIRED,@QTY_PER_ASSEMBLY,@RELEASE_NO,@SEQUENCE_NO,@ORDER_CODE,@PART_OWNERSHIP)" 


    Using conn As New OracleClient.OracleConnection(sConnectionString) 

     Dim adapter As New OracleDataAdapter 
     Dim cmd As New OracleClient.OracleCommand() 
     cmd.Connection = conn 

     cmd.Connection.Open() 
     cmd.CommandText = strSql 
     adapter.InsertCommand = New OracleCommand(strSql, conn) 
     adapter.UpdateCommand = cmd 
     adapter.Update(table) 

     '--cmd.ExecuteReader() 
     cmd.Connection.Close() 

     MsgBox("Saved! Kindly check your Shop order!") 
     DataGridView1.DataSource = Nothing 





    End Using 

End Sub 

는 이제 테이블에서 레코드를 삽입에 그것을 아래로 가져왔다,하지만 문제는 단지 행의 첫 번째 열을 구문 분석이다. 그래서 모두 테이블의 6 열이 CSV의 첫 번째 필드 값으로 업데이트된다고 가정합니다. 내가 바보 야하는 경우

MsgBox("Saving...") 


    Dim parser As New FileIO.TextFieldParser("C:\Documents and Settings\nUser\Desktop\solution.csv") 

    parser.Delimiters = New String() {","} ' fields are separated by comma 
    parser.HasFieldsEnclosedInQuotes = True 
    parser.TrimWhiteSpace = True 

    Dim i As Integer 

    For i = 0 To DataGridView1.RowCount - 1 


     Dim CurrentField = parser.ReadFields() 
     '--parser.ReadLine() 

Dim sConnectionString As String = "Data Source=MYSERVER.COM;User ID=MYUSER;Password=MYPASSWD;" 

Dim strSql As String = "INSERT INTO SHOP_MATERIAL_ALLOCT(ORDER_NO, LINE_ITEM_NO, CONTRACT, PART_NO, QTY_REQUIRED, QTY_PER_ASSEMBLY) VALUES (:ORDER_NO,   :LINE_ITEM_NO,:CONTRACT,:PART_NO,:QTY_REQUIRED,:QTY_PER_ASSEMBLY)" 




     Using conn As New OracleClient.OracleConnection(sConnectionString) 
      Using cmd As New OracleClient.OracleCommand() 


       Dim adapter As New OracleDataAdapter 
       conn.Open() 
       cmd.Connection = conn 
       cmd.CommandText = strSql 
       cmd.Parameters.AddWithValue("ORDER_NO", CurrentField(i)) 
       cmd.Parameters.AddWithValue("LINE_ITEM_NO", CurrentField(i)) 
       cmd.Parameters.AddWithValue("CONTRACT", CurrentField(i)) 
       cmd.Parameters.AddWithValue("PART_NO", CurrentField(i)) 
       cmd.Parameters.AddWithValue("QTY_REQUIRED", CurrentField(i)) 
       cmd.Parameters.AddWithValue("QTY_PER_ASSEMBLY", CurrentField(i)) 



       cmd.CommandText = strSql 
       adapter.InsertCommand = New OracleCommand(strSql, conn) 
       adapter.UpdateCommand = cmd 
       'adapter.Update(table) 
       cmd.ExecuteNonQuery() 
       cmd.Connection.Close() 

       DataGridView1.DataSource = Nothing 
      End Using 
     End Using 
    Next 

답변

0

사용하지 마십시오 오라클은 그렇게 날 무시하시기 바랍니다.

cmd.Connection.Open() 대신 conn.Connect()을 사용해 보셨습니까?

0

DataTable을 만들고 열을 추가하는 코드 부분을 이해하지 못합니다.
아무데도 사용되지 않으므로 문제와 관련이 없습니다. 오라클에서 직접 ODP로 교체하는 것을 시도해야하므로
의 데이터 연결에게로 마지막

' If I remember well, the parameters in an oracle statement are prefixed by a ":" 
Dim strSql As String = "INSERT INTO SHOP_MATERIAL_ALLOC_TAB(ORDER_NO," + 
         "LINE_ITEM_NO, CONTRACT, PART_NO, QTY_REQUIRED, QTY_PER_ASSEMBLY, " + 
         "RELEASE_NO,SEQUENCE_NO,ORDER_CODE,PART_OWNERSHIP) VALUES (:ORDER_NO, " + 
         ":LINE_ITEM_NO,:CONTRACT,:PART_NO,:QTY_REQUIRED,:QTY_PER_ASSEMBLY, " + 
         ":RELEASE_NO,:SEQUENCE_NO,:ORDER_CODE,:PART_OWNERSHIP)" 

' Connection and Command are Disposable, so use `Using` around them 
Using conn As New OracleClient.OracleConnection(sConnectionString) 
Using cmd As New OracleClient.OracleCommand() 

    Dim adapter As New OracleDataAdapter 
    conn.Open() 
    cmd.Connection = conn 
    cmd.CommandText = strSql 
    ' Now you need to add the parameters to your command 
    ' One parameter for each column used in the insert statement 
    ' I suppose that values for the paramenter are in the current line from your CSV 
    cmd.Parameters.Add("ORDER_NO", OracleType.VarChar).Value = parser[index_of_orderNumber_Text]) 
    ' .... other parameters to be added.... 
    ' Now you can execute the INSERT statement directly with your command 
    cmd.ExecuteNonQuery() 
End Using 

와, 관련된 코드를 살펴 보자는 OracleClient 네임 스페이스는 Microsoft에서 더 이상 사용되지 않습니다.

+0

내 실수를 지적 해 주셔서 감사합니다. 스티브. 나는 똑같이 고쳤지만 경고 메시지를 준다. 더 이상 쓸모없고 더 이상 쓸모없는 것을 추가하고 AddWithValue를 대신 사용하라는 제안을한다. - cmd.Parameters.AddWithValue ("ORDER_NO", parser [0]) "Identifier expected"오류가 발생하고 인덱스 값이 제공되는 위치를 가리 킵니다. 이것에 대한 많은 문서가 아니라, 나를 안내 해주십시오. – user1305070

+0

죄송합니다. 본인의 예에서 실수를했습니다. 'cmd.Parameters.Add ("ORDER_NO", OracleType.VarChar) .Value = parser [0];'AddWithValue에 대해서는 말할 수 없습니다. 당신이 작성한대로 작동해야합니다. 이전 방법을 시도하십시오 (수정 됨) – Steve

+0

이것은 [MSDN 링크] (http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparametercollection.addwithvalue (v = vs.100) .aspx)입니다.)를 Microsoft의 OracleClient에 대한 문서에 추가하십시오. – Steve