Как выполнить массовую вставку объекта с динамической длиной и без имен столбцов - PullRequest
0 голосов
/ 16 января 2019

Я использую данные опроса (доставленные как json) от нашего провайдера через SSE и десериализую их в Объект. Объект содержит следующие данные без информации заголовка, только данные («1», «1», «Да, я делаю»)

|UserNumber  | Variable1   | Variable2    |
|------------|-------------|--------------|
| 1          |      1      |  Yes, I do   |
| 1          |      5      |  No, I do not|

Количество пользователей и количество переменных отличаются от опроса к опросу, но на данный момент максимум составляет 500 000 и 350. Объект выглядит следующим образом:

(1) User1
  (1) "4482359"
  (2) "12526"
  (3) "5"
  (4) ""
...    
(2) User1
  (1) "5847895"
  (2) "33568"
  (3) "6"
  (4) "2"
...

Я храню данные в объекте , и теперь я хочу сохранить данные в таблице SQL, но я не уверен, как это сделать, так как мой объект отличается по длине (оба измерения). То, что я уже достиг, - это перенести данные в .csv и использовать Bulk Insert (хотя у меня возникли проблемы из-за разделителя ",")

    query.Append("USE Import BULK INSERT dbo.[Insert_Table] FROM")
    query.Append(" 'C:\Users\I\Desktop\Insert_Table.csv' ")
    query.Append("With (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')")

Но для этого мне нужно перебрать все элементы.

Я также читал о SQLBulkCopy, но для этого мне нужно перенести данные в Datatable и сопоставить их с таблицей SQL. Но так как у меня нет имен столбцов в объекте, я не вижу, как это использовать. Кто-нибудь может дать мне фрагмент, как вставить объект в мою базу данных?

1 Ответ

0 голосов
/ 16 января 2019

Создайте такой стол

            DataTable dt = new DataTable();
            dt.Columns.Add("UserNumber", typeof(int));
            for(int i = 1; i <=10; i++)
            {
                dt.Columns.Add("Column" + i.ToString(), typeof(string));
            }
...