C#bulkcopy到SQL表类型问题

c# datagridview sql sqlbulkcopy

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

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

  • PG nvarchar(50)
  • 零件nvarchar(50)
  • 销售浮动
  • LostSales浮动
  • Pareto6 int
  • p6图像
  • Pareto5 int
  • p5图像
  • Pareto4 int
  • p4图像
  • Pareto3 int
  • p3图像
  • CurrentPareto int
  • pNew图像
  • 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表。

一般承认的答案

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

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因