C#bulkcopy到SQL表类型问题

时间:2012-04-30 09:12:58

标签: c# sql datagridview sqlbulkcopy

使用C#,。net 4,Visual Studio 2010和SQL Server 2008。

我目前有一个名为NewPeriodPareto的表包含以下列:

  • PG nvarchar(50)
  • Part nvarchar(50)
  • Sales float
  • LostSales float
  • Pareto6 int
  • p6 image
  • Pareto5 int
  • p5 image
  • Pareto4 int
  • p4 image
  • Pareto3 int
  • p3 image
  • CurrentPareto int
  • pNew Image
  • NewPareto int

以下是我的代码,试图填写表格:

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();
        }
}

正如您所看到的,提供的代码尝试从我的数据表中复制数据。数据表绑定到我的数据网格源。

以下是我得到的错误:

  

@ bulkCopy.WriteToServer(表);
  数据源中Int32类型的给定值无法转换为   输入指定目标列的图像。

现在我首先想到的是我的SQL表的某个字段中有一个类型设置错误,但经过多次检查后,似乎没有任何错误。

所以我所追求的是这个小问题的解决方案,甚至是实现相同目标的另一种/更简单的方法,即从DataTable程序填充SQL表。

1 个答案:

答案 0 :(得分:0)

[时间不够,所以我打算给你一个暗示]

您应该查看SqlBulkCopy的ColumnMappings。这允许您将源列显式映射到目标。可能会有一些额外的列,如ID或类似的,现在正在使用。