C# Excel转换为SQL。批量复制的替代方案?

C# Excel转换为SQL。批量复制的替代方案?,c#,sql,sqlbulkcopy,C#,Sql,Sqlbulkcopy,我有一段代码,它使用DataReader和SqlBulkCopy将数据从excel电子表格复制到MSSQL表。它工作得很好,直到我在表上创建了一个主键,现在它失败了。我首先删除SQL表的内容,然后用excel中的数据再次填充它 由于我正在移动的数据量很小,我想知道是否有比使用BulkCopy更好的方法 更新:以下是相关代码,我收到的错误是: “数据源中字符串类型的给定值无法转换为指定目标列的浮点类型。” BulkCopy是最快的方法,即如何从C#向MSSQL插入数据。创建主键,表明您正在强制实施

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

由于我正在移动的数据量很小,我想知道是否有比使用BulkCopy更好的方法

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


BulkCopy是最快的方法,即如何从C#向MSSQL插入数据。

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


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

批量复制应该可以正常工作,因此您的问题似乎是重复的密钥(错误消息是什么?)。您可能有错误的数据,或者您创建的主键太窄

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


GJ

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

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

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

例如:

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

好的,这似乎是一个完全不同的问题,在year ExcelNamedRange中似乎有一个值不能转换为SqlTable中的一列。你能看到一些吗?可能是0除错误等


还要确保列对齐。不确定SqlBulkCopy如何映射列,我认为它只是将NamedRange的第一列放入SqlTale等的第一列,因此确保它们;我们的顺序是对的。(或者看看如果你更改名称会发生什么)

主键在那里有什么问题,你遇到了什么错误?@Lasse我已经用错误和导致错误的代码更新了我的帖子。我被引导相信BulkCopy应该只用于移动大量数据,而我只移动少量数据。还是不是这样?@Brian:你可以用它来处理任何数量的数据。但是,如果您知道这些数据是正确的,就没有理由不使用BulkCopy。但是,BulkCopy有几个特殊行为,即不会引发触发器。
_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");