Excel到SQL。 BulkCopy的替代方案?

c# sql sqlbulkcopy

我有一段代码使用DataReader和SqlBulkCopy将数据从excel电子表格复制到MSSQL表。它工作正常,直到我在表上创建一个主键,现在它失败了。我首先删除SQL表的内容,然后再使用excel中的数据填充它。

因为它只是我移动的少量数据,我想知道是否有比使用BulkCopy更好的方法吗?

更新:下面是相关代码,我收到的错误是:“数据源中String类型的给定值无法转换为指定目标列的float类型。”

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

一般承认的答案

SqlBulkCopy自动映射字段。但是,由于您添加了主键,因此默认映射不再有效。

您必须设置ColumnMapping以明确告诉您的SqlBulkCopy对象如何映射字段。

除主键外(假设您在PK上使用标识),对所有字段执行此操作。

例如:

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

热门答案

创建主键,表明您正在实施域约束(一件好事)。

因此,您的实际问题不是您需要另一种方法来执行批量插入, 而是您需要找出重复键的原因(执行PK的确切原因)。




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