2

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

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

  • PG nvarchar(50)
  • 部分 nvarchar(50)
  • 销售浮动
  • LostSales 浮动
  • 帕累托6整数
  • p6 图像
  • Pareto5 整数
  • p5 图像
  • Pareto4 整数
  • p4 图像
  • Pareto3 整数
  • p3 图像
  • 当前帕累托整数
  • 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();
        }
}

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

以下是我得到的错误:

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

现在我想到的第一件事是我的SQL表的一个字段中的类型设置错误,但经过多次检查,似乎没有任何问题。

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

4

1 回答 1

1

【时间不多,给你个提示】

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

于 2012-04-30T15:29:16.363 回答