“给定的ColumnMapping与源或目标中的任何列都不匹配”,而使用C#将Excel导入到SQL Server中时,
我收到一个错误
给定的ColumnMapping不匹配源或目标中的任何列
用下面的代码
private void button1_Click_1(object sender, EventArgs e) { of1.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"; if ((of1.ShowDialog()) == System.Windows.Forms.DialogResult.OK) { imagepath = of1.FileName; //file path textBox1.Text = imagepath.ToString(); } } private void loadbtn_Click(object sender, EventArgs e) { string ssqltable = comboBox1.GetItemText(comboBox1.SelectedItem); string myexceldataquery = "select * from ["+ ssqltable + "$]"; try { OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+imagepath+";Extended Properties='Excel 12.0 Xml; HDR=YES;IMEX=1;';"); string ssqlconnectionstring = "Data Source=.;Initial Catalog=Bioxcell;Integrated Security=true"; OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oconn); oconn.Open(); OleDbDataReader dr = oledbcmd.ExecuteReader(); SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring); bulkcopy.DestinationTableName = ssqltable; while (dr.Read()) { bulkcopy.WriteToServer(dr); } oconn.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } /* DisplayingData DD = new DisplayingData(); DD.Show();*/ }
我认为SQL Server区分大小写,我复制相同的列名称,但相同的错误。
有没有办法解决?
像这样使用SqlBulkCopy.ColumnMapping
for (int i = 0; i < dr.FieldCount; i++) { bulkcopy.ColumnMappings.Add(i, i); }
我只是根据你的图片创build了一个testing表和一个testing文件。 它为我工作得很好,但只会添加第一行的数据。
也许你应该使用一个DataTable
然后再试一次:
DataTable dt = new DataTable(); dt.Load(oledbcmd.ExecuteReader()); SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring); bulkcopy.DestinationTableName = ssqltable; for(int i = 0; i < dt.Columns.Count; i++){ bulkcopy.ColumnMappings.Add(i,i); } bulkcopy.WriteToServer(dt);
当我尝试像所有我的testing行被添加到数据库。