Vb.Net и CSV файлы - PullRequest
       2

Vb.Net и CSV файлы

0 голосов
/ 31 марта 2012

У меня есть приложение VB.Net, которое должно позволить пользователю импортировать файл CSV в сетку данных (что он делает), а затем обновить эти строки в таблицу в Oracle.

Вот что у меня такдалеко, но это, похоже, не работает и не выдает ошибку.

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

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Я не понимаю ту часть вашего кода, которая создает DataTable и добавляет столбцы.
Он нигде не используется, поэтому не связан с вашей проблемой.
Давайте рассмотрим код, относящийся к подключению к данным

' 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 

И, наконец, Microsoft объявил, что пространство имен OracleClient устарело, поэтому вам следует попытаться заменить его на ODP непосредственно из Oracle.

0 голосов
/ 31 марта 2012

Никогда не использовал оракула, поэтому, пожалуйста, игнорируйте меня, если я глуп.

Вы пробовали conn.Connect() вместо cmd.Connection.Open()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...