С# массовое копирование в тип таблицы SQL

Использование C#, .net 4, Visual Studio 2010 и SQL Server 2008.

В настоящее время у меня есть таблица с именем NewPeriodPareto, содержащая следующие столбцы:

  • PG nvarchar(50)
  • Часть nvarchar(50)
  • Плавающий объем продаж
  • Поплавок LostSales
  • Парето6 инт
  • изображение p6
  • Парето5 инт
  • изображение p5
  • Парето4 внутр.
  • изображение p4
  • Парето3 инт
  • изображение p3
  • CurrentPareto int
  • pНовое изображение
  • Новыйпарето инт

Ниже приведен мой код, который пытается заполнить таблицу:

private void CreateNewPeriod()
{
        DataSet dsDG = new DataSet();
        DataTable dt = new DataTable();

        dsDG = (DataSet)ParetoGrid.DataSource;
        dt = dsDG.Tables[0];

        string ThetableName = "NewPeriodPareto";
        BulkInsertDataTable(myConn, ThetableName, dt);
}

public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table)
{
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlBulkCopy bulkCopy =
                new SqlBulkCopy
                (
                connection,
                SqlBulkCopyOptions.TableLock |
                SqlBulkCopyOptions.FireTriggers |
                SqlBulkCopyOptions.UseInternalTransaction,
                null
                );

            bulkCopy.DestinationTableName = tableName;
            connection.Open();

            bulkCopy.WriteToServer(table);
            connection.Close();
        }
}

Как вы можете видеть, предоставленный код пытается скопировать данные из моей таблицы данных. Datatable привязан к источнику My data grids.

Я получаю следующую ошибку:

@bulkCopy.WriteToServer(table);
Заданное значение типа Int32 из источника данных не может быть преобразовано в изображение типа указанного целевого столбца.

Теперь первое, о чем я подумал, это то, что в одном из моих полей моей таблицы SQL был установлен неправильный тип, но после многократных проверок, похоже, все в порядке.

Итак, что мне нужно, так это решение этой небольшой проблемы или даже альтернативный/более простой способ достижения той же цели, то есть заполнить таблицу SQL из таблицы данных программ.


person lemunk    schedule 30.04.2012    source источник
comment
Не могли бы вы опубликовать выбор из адаптера таблицы, используемого для заполнения данных?   -  person Nikola Markovinović    schedule 30.04.2012
comment
представление сетки данных сделано из хранимой процедуры и добавлены столбцы для изображений из кода. ты это имеешь ввиду?   -  person lemunk    schedule 30.04.2012
comment
Да. Я предположил, что вы используете адаптеры таблиц для извлечения данных. Соответствует ли порядок столбцов в сетке определению таблицы?   -  person Nikola Markovinović    schedule 30.04.2012
comment
да, это было одной из моих первых вещей, на которые я обратил внимание, типы данных совпадают, как и порядок столбцов, это то, что меня смущает по поводу ошибки. Я думаю, что есть что-то, когда datagridview.source равен набору данных   -  person lemunk    schedule 30.04.2012
comment
Единственное отличие состоит в том, что моя процедура получает некоторые столбцы, все столбцы, кроме столбцов изображения. Они генерируются во время выполнения. Итак, имеет ли это отношение к тому, что источник просматривает данные только из запроса?   -  person lemunk    schedule 30.04.2012


Ответы (1)


[Времени мало, так что дам вам подсказку]

вы должны изучить ColumnMappings SqlBulkCopy. Это позволяет вам явно сопоставить столбец вашего источника с целью. Там могут быть некоторые дополнительные столбцы, такие как идентификатор или что-то подобное, которые мешают прямо сейчас.

person Pleun    schedule 30.04.2012
comment