C# 选择“在excel工作表中查询”

C# 选择“在excel工作表中查询”,c#,sql,excel,C#,Sql,Excel,我对select查询有问题。我的目标是在excel工作表中选择一些列,并将它们复制到我的sql表中。我有六列要复印。当我试图复制由于标识列而更改的订单时 这是我的密码 string path = Server.MapPath(Session["excel_sheet"].ToString()); //Create connection string to Excel work book string excelConnectionString = @"Prov

我对select查询有问题。我的目标是在excel工作表中选择一些列,并将它们复制到我的sql表中。我有六列要复印。当我试图复制由于标识列而更改的订单时

这是我的密码

  string path = Server.MapPath(Session["excel_sheet"].ToString());
        //Create connection string to Excel work book
        string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
        //Create Connection to Excel work book
        OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
        //Create OleDbCommand to fetch data from Excel
        OleDbCommand cmd2 = new OleDbCommand("Select [column_1],[column_2],[column_3],[column_4],[column_5],[column_6] from [Sheet1$]", excelConnection);
        excelConnection.Open();
        OleDbDataReader dReader;
        dReader = cmd2.ExecuteReader();
        SqlBulkCopy sqlBulk = new SqlBulkCopy(con);
        //Give your Destination table name
        sqlBulk.DestinationTableName = "MYtable";
        sqlBulk.WriteToServer(dReader);
        excelConnection.Close();
我的表有如下列:identity\u列、column\u 1、column\u 2、column\u 3、column\u 4、column\u 5、column\u 6


例如,excel列_4字符串中的副本写入sql列_3后,它必须写入列_4。我在等待答案

您应该使用SqlBulkCopy类的ColumnMappings属性

例如:

sqlBulk.ColumnMappings.Add("column_1", "column_1");

sqlBulk.DestinationTableName = "MYtable";

您可以遍历列并映射它们,这将把excel中的列名映射到连接中的相同名称(即excel column_1=sql column_1)

SqlBulkCopy sqlBulk=newsqlbulkcopy(con);
//定义列映射
for(int i=0;i
    SqlBulkCopy sqlBulk = new SqlBulkCopy(con);
       //Define column mappings 

    for (int i = 0; i < dReader.FieldCount; i++)
    {
        sqlBulk.ColumnMappings.Add(dReader.GetName(i), dReader.GetName(i));
     }