2012-08-03 3 views
0

select query에 문제가 있습니다. 내 목표는 엑셀 시트의 일부 열을 선택하고 내 SQL 테이블에 복사하는 것입니다. 복사 할 6 개의 열이 있습니다. ID 열 때문에 변경된 주문을 복사하려고했습니다.엑셀 시트를 선택하십시오.

내 코드는 다음과 같습니다.

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에서 복사 한 후 _4 문자열은 sql column_3에 기록되며 column_4에 기록해야합니다. 나는 대답을 기다리고 있습니다

답변

0

당신은이 연결에서 같은 이름으로 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"; 
관련 문제