C# bulkcopy 到 SQL 表类型问题

Posted

技术标签:

【中文标题】C# bulkcopy 到 SQL 表类型问题【英文标题】:C# bulkcopy to SQL table type issue 【发布时间】:2012-05-10 00:02:25 【问题描述】:

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

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

PG nvarchar(50) 零件 nvarchar(50) 销售额浮动 Lo​​stSales 浮动 Pareto6 整数 p6 图片 帕累托5整数 p5 图片 Pareto4 整数 p4 图片 Pareto3 整数 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();
        

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

以下是我得到的错误:

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

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

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

【问题讨论】:

你能从用于填充数据的表适配器中发布选择吗? datagrid 视图由存储过程构成,并为代码中的图像添加了列。这是你的意思吗? 是的。我假设您正在使用表适配器来检索数据。网格中的列顺序是否与表定义匹配? 是的,这是我首先要看的东西之一,数据类型与列顺序匹配,这就是让我对错误感到困惑的原因。当 datagridview.source 等于数据集时,我想有一些东西 唯一的区别是我的程序得到“一些列,除了图像列之外的所有列。这些是在运行时生成的。所以,这与查看数据的源有关吗仅来自查询? 【参考方案1】:

[时间不多,给你个提示]

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

【讨论】:

msdn.microsoft.com/en-us/library/…

以上是关于C# bulkcopy 到 SQL 表类型问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle ODP.NET BulkCopy 到临时表问题

SqlBulkCopy只支持SQL Server? EF Core实现支持多数据库类型的Bulk Copy

SQL批量插入表类 SqlBulkInsert

如何使用 sql Bulkcopy 在表中插入 datagridview 行

Bulkcopy对应的实现是Oracle的SQL*LOADER,期间造成Index Unusable,并且last_ddl_time上是不体现的

powershell sql-to-sql powershell bulkcopy import speedtest