SQL批量插入不正确地插入值到表中
我有一个Excel文件(.xlsx),我试图将文件的内容上传到Sql服务器表中。 Iam使用SQL批量复制批量插入数据。 数据被插入到表中,但是我发现数据没有正确插入。
这里是示例Excel数据 –
这是Sql批量复制的代码:
string fname = Path.GetFileName(fup_addRoute.FileName); fup_addRoute.SaveAs(Server.MapPath("/Admin/UserRoutes/" + fname)); string path = Server.MapPath("/Admin/UserRoutes/" + fname); using (OleDbConnection connection = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", path))) { OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); connection.Open(); System.Data.Common.DbDataReader dr = command.ExecuteReader(); SqlBulkCopy bulkInsert = new SqlBulkCopy(con); bulkInsert.DestinationTableName = "routesdata"; bulkInsert.WriteToServer(dr); connection.Close(); dr.Close(); bulkInsert.Close(); }
插入后的数据:
只有最后一行被插入,并且Excel表格中的第一列值丢失。 表中的xid列是一个自动增量列。
这个过程在MySql中很容易,加载数据infile,但是我只是迁移到Sql server。 我在做什么错在我的代码。 build议请。
我实际上有点惊讶,你不报告例外。
无论如何,我怀疑你的问题(至less部分)是你需要指定列映射。
从http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx
如果映射未定义 – 也就是说,ColumnMappings集合是空的,那么这些列将根据序号位置隐式映射。 为此,源模式和目标模式必须匹配。 如果他们不这样做,则会抛出InvalidOperationExceptionexception。
从我可以看到你的Excel文件和你的数据库表不匹配的所有列(如自动增量)。 所以我会尝试指定你的列映射 。
作为我之前的评论的后续,因为你只是错过了第一行,这听起来像你需要添加HDR=No
连接string。
它应该看起来像这样:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No';
– 编辑
请注意增加的撇号。
祝你好运。