我收到错误
给定的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区分大小写,我复制了相同的列名,但错误相同..
有什么方法吗?
答案 0 :(得分:1)
像这样使用SqlBulkCopy.ColumnMapping
for (int i = 0; i < dr.FieldCount; i++) {
bulkcopy.ColumnMappings.Add(i, i);
}
我根据你的图片创建了一个测试表和一个测试文件。它对我来说很好,但只会添加第一行数据。
也许您应该使用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);
当我尝试将所有测试行添加到数据库中时。