2016-10-08 3 views
0

Могу ли я использовать sqlbulkcopy для вставки не строковых значений из файла csv в таблицу sql?vb.net sql bulkcopy non string values ​​issue

У меня есть следующий код, чтобы создать DataTable:

 Dim dt As New DataTable() 
    Dim line As String = Nothing 
    Dim i As Integer = 0 

    Using sr As StreamReader = File.OpenText("C:\Users\Administrator\Desktop\Sked Lente\Data\wingrd13.csv") 
     line = sr.ReadLine() 
     Do While line IsNot Nothing 
      Dim data() As String = line.Split(","c) 
      If data.Length > 0 Then 
       If i = 0 Then 
        For Each item In data 
         dt.Columns.Add(New DataColumn()) 
        Next item 
        i += 1 
       End If 
       Dim row As DataRow = dt.NewRow() 
       row.ItemArray = data 
       dt.Rows.Add(row) 
      End If 
      line = sr.ReadLine() 
     Loop 
    End Using 

Я также следующий код SqlBulkCopy:

 Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings("SQLConnStr").ConnectionString) 
     cn.Open() 
     Using copy As New SqlBulkCopy(cn) 
      copy.ColumnMappings.Add(0, 0) 
      copy.ColumnMappings.Add(1, 1) 
      copy.ColumnMappings.Add(2, 2) 
      copy.ColumnMappings.Add(3, 3) 
      copy.ColumnMappings.Add(4, 4) 
      copy.ColumnMappings.Add(5, 5) 
      copy.ColumnMappings.Add(6, 6) 
      copy.DestinationTableName = "wingrd13" 
      copy.WriteToServer(dt) 
     End Using 
    End Using 

Я получаю сообщение об ошибке в строке: copy.ColumnMappings.Add (6, 6)

Колонка в моей базе данных типа real.

С уважением

ответ

0

SqlBulkCopy вставит данные из вашего DataTable так, если вы хотите вставить данные, не текст, то ваш DataTable должен содержать данные, которые не текст. Вы обязаны преобразовывать данные, которые вы читаете из файла CSV, в соответствующие типы данных, прежде чем добавлять их в DataTable. Преобразование произойдет не автоматически.

+0

Спасибо, что я использовал это: datatabelOesskattings.Columns.Add (новый DataColumn («Plantjaar», GetType (Integer))). В моем столбце базы данных Sql задано значение int, а не null. Еще не повезло. – Gideon

+0

ОК, но вы фактически конвертировали текст, который вы читали из файла CSV, в значения «Целое», прежде чем добавлять его в «DataTable»? Вот что я прямо сказал, что вам нужно было сделать в моем ответе. – jmcilhinney

+0

Спасибо, я использовал следующее: .Add ("@ PLANTJAAR", SqlDbType.Int, 50, "PLANTJAAR"). Прекрасно работает. Еще раз, спасибо. – Gideon