2015-04-10 2 views
0

Я пытаюсь прочитать данные из CSV-файла и вставить данные в базу данных mysql. Файл .csv и база данных имеют 4 столбца.TextFieldParser для чтения файла и вставки в базу данных

Я могу вставить данные в базу данных. Соединения работают нормально, но я не могу получить поля из .csv-файла в правильных полях в базе данных.

Как я могу получить поле из CSV-файла в том же поле в базе данных с помощью метода, который я использую?

Мой код похож на этот:

Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\ParserText.csv") 
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited 
MyReader.Delimiters = New String() {","} 
Dim currentRow As String() 
While Not MyReader.EndOfData 
    Try 
     currentRow = MyReader.ReadFields() 
     For Each currentField As String In currentRow 

      /*Use sql to insert data to database here*/ 

      cmd.commandText = "INSERT INTO mydatabase(column1, column2, column3, column4) VALUES(??, ??, ??, ??)" 
      cmd.ExecuteNonQuery() 

     Next 
    Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 
     MsgBox("Line " & ex.Message & " is invalid. Skipping") 
    End Try 
    End While 
End Using 
+0

Вы загружаете файл csv в datagridview или напрямую вставляете его в базу данных? –

+0

Нет, я просто читаю каждое поле из каждой строки в CSV-файле и пытаюсь вставить значения полей в базу данных. Весь код, используемый для чтения файла, показан выше – Koiski

+0

, вы можете использовать datatable для хранения данных, а затем вставить данные в таблицу в sql правильно? –

ответ

1

попробовать этот код

Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\ParserText.csv") 
    dim table as new datatable 
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited 
    MyReader.Delimiters = New String() {","} 
    myreader.Readline() 

Do Until myreader.EndOfData = True 
    table.Rows.Add(myreader.ReadFields()) 
Loop 
         'Use sql to insert data to database here 
    for intconut=0 to table.rows.count-1 
       cmd.commandText = "INSERT INTO mydatabase(column1, column2, column3, column4) VALUES('" &table.rows(intcount).item(0) & "','" & table.rows(intcount).item(1) & "','" & table.rows(intcount).item(2) & "', '" & table.rows(intcount).item(3)) & "')" 
       cmd.ExecuteNonQuery() 

    Next 
     Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 
      MsgBox("Line " & ex.Message & " is invalid. Skipping") 
     End Try 
     End While 
    End Using 

это может помочь.

+0

Получение ошибки в строке: table.rows.Add (myreader.ReadFields()). Ошибка: в System.Data.dll произошло необработанное исключение типа «System.ArgumentException». Дополнительная информация: Массив ввода больше, чем количество столбцов в этой таблице. – Koiski

+0

добавить четыре столбца в datatable, используя 'table.columns.add (" column1 ")' перед readfields(). –

+0

Получение новой ошибки: неправильный синтаксис рядом с ключевым словом «таблица». Из моего запроса sql – Koiski

1

Без использования sql parameterised queries. Вы можете изменить внутри вашего пункта в то время, чтобы соответствовать следующим образом:

While Not MyReader.EndOfData 
    Try 
     currentRow = MyReader.ReadFields() 

     cmd.commandText = string.Format("INSERT INTO mydatabase(column1, column2, column3, column4) VALUES (""{0}"", ""{1}"", ""{2}"", ""{3}"")", currentRow[0], currentRow[1], currentRow[2], currentRow[3]) 

     cmd.ExecuteNonQuery() 

     Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 
     MsgBox("Line " & ex.Message & " is invalid. Skipping") 
    End Try 
End While 

После того, как вы понимаете, как работает этот код, вы должны смотреть, чтобы заменить его на parameterised query.

+0

Это не позволит мне использовать currentRow [0], чтобы захватить ячейки из строки ... – Koiski

+0

что за ошибка? – 5uperdan

Смежные вопросы