首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel转换为SQL。BulkCopy的替代品?

Excel转换为SQL。BulkCopy的替代品?
EN

Stack Overflow用户
提问于 2011-03-25 19:21:44
回答 5查看 2.2K关注 0票数 2

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

由于我移动的数据量很小,我想知道是否有比使用BulkCopy更好的方法来完成这项工作?

Update:下面是相对代码,我收到的错误是:“来自数据源的字符串类型的给定值无法转换为指定目标列的浮点数类型。”

代码语言:javascript
复制
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);

                    }
                }                 
            }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-25 20:26:37

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

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

对除主键以外的所有字段执行此操作(假设您在PK上使用身份)。

例如:

代码语言:javascript
复制
_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");
票数 3
EN

Stack Overflow用户

发布于 2011-03-25 19:31:51

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-03-25 19:36:50

BulkCopy应该工作得很好,所以您的问题似乎是重复的键(错误消息是什么?)。您可能有错误的数据,或者您创建的主键太窄。

您还可以首先将数据推入一个临时表(没有键/索引等,只是一个普通表),然后使用update (在2008年时合并)语句将其放入实际的表中。

GJ

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5431735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档