2012-08-03 88 views
0

我有一个选择查询的问题。我的目标是选择Excel表中的一些列,并将其复制到我的SQL表中。我有六个colums来复制。当我试图复制因身份列而改变的订单时。选择查询在excel表

这是我的代码;

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_column,COLUMN_1,COLUMN_2,column_3,column_4,column_5,column_6列。

在excel column_4中拷贝例如字符串后写入sql column_3,它必须写入column_4。我在回答一个问题

回答

0

您可以通过列循环并将其映射,这将在连接在Excel中相同名称的列名映射(即Excel的COLUMN_1 = SQL COLUMN_1)

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)); 
    } 
0

您应该使用SqlBulkCopy类的ColumnMappings属性。

为前:

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

sqlBulk.DestinationTableName = "MYtable";