2012-01-11 3 views
0

SQLBulkCopy에서 읽으므로 Excel 문서에서 SQL Server로 수천 개의 행을 가져 오는 데 사용하고 싶습니다. 나는 자료를 수정하지 않고 그것을 직접하는 기사를 계속 읽는다. SQLBulkCopy을 수행하기 전에 Excel 문서의 데이터를 수정하고 유효성 검사를 수행해야합니다. 이것을 할 수 있습니까? 내가 과부하에서 데이터를 수정할 수 있고 큰 DataTable을 만들고 그 DataTableWriteToServer으로 가져올 수 있다고 가정합니다.SQL을 사용하여 SQL Server로 SQL 대량 복사 (데이터 수정 포함)

답변

1

가져 오기 전에 유효성 검사/수정을 위해 반복 할 수있는 DataReader 또는 DataSet이 필요할 수 있습니다.

이 유틸리티를 사용하면 도움이 될 수도 - http://exceldatareader.codeplex.com/

+0

그래서이 보인다. –

+0

네,이 도구는 쉽게 사용할 수 있지만 내 자신의 DataSet 공급자를 사용하여이 작업을 직접 수행했습니다. 유효성 검사가 끝나면 같은 DataSet 테이블을 사용하여 가져 오기를 수행하거나 별도의 SqlBulkCopy를 사용하여 파일을 직접 작업 할 수 있습니다. – PinnyM

+0

감사합니다. 벌크 삽입이 실패한 경우 어떤 행에 오류가 있는지 확인하는 방법이 없습니다. –

0

이 나를 위해 잘 작동 : 가져 오기 전에 파일에 대한 검증을 할 수있는 것처럼

public ActionResult Create(HttpPostedFileBase file) 
    { 
     string strConnection = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString; 

     //file upload path 
     var fileName = Path.GetFileName(file.FileName); 
     // store the file inside ~/App_Data/uploads folder 
     var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
     file.SaveAs(path); 

     //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 
     excelConnection.Open(); 
     DataTable dt = new DataTable(); 

     dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     if (dt == null) 
     { 
      return null; 
     } 

     String[] excelSheets = new String[dt.Rows.Count]; 
     int t = 0; 
     //excel data saves in temp file here. 
     foreach (DataRow row in dt.Rows) 
     { 
      excelSheets[t] = row["TABLE_NAME"].ToString(); 
      t++; 
     } 

     OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString); 

     string query = string.Format("SELECT * FROM [{0}]", excelSheets[0]); 

     OleDbCommand cmd = new OleDbCommand(query, excelConnection); 
     //excelConnection.Open(); 
     OleDbDataReader dReader; 
     dReader = cmd.ExecuteReader(); 
     SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection); 
     //Give your Destination table name 
     sqlBulk.DestinationTableName = "[FSM].[DFS_Akustik]"; 
     sqlBulk.WriteToServer(dReader); 
     excelConnection.Close(); 

     ViewBag.view_dfs_akustik = dbman.View_DFS_Akustik.ToList(); 
     return View(); 
    } 
관련 문제