2014-01-18 5 views
1

У меня есть Excel 2007 и Visual Web Developer Express 2010. Я хотел бы импортировать Sheet1 файла xlsx, а затем добавить данные в набор данных и поместить эти данные в MS SQL база данных.Импорт листа Excel в базу данных MS SQL

string ExcelConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"; 
    string SQLConStr = "got connection string that works"; 

    OleDbConnection ExcelConnection = new OleDbConnection(ExcelConStr); 
    using (ExcelConnection) 
    { 
     string sql = string.Format("Select * FROM [{0}]", "Sheet1$"); 
     OleDbCommand command = new OleDbCommand(sql, ExcelConnection); 
     ExcelConnection.Open(); 
     using (OleDbDataReader dr = command.ExecuteReader()) 
     { 
      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLConStr)) 
      { 
       bulkCopy.DestinationTableName = "dbo.databaseName";    
       bulkCopy.WriteToServer(dr); 
      } 
     } 
    } 

Мне нужно что-то вроде объемного копирования, которое является бесплатным и простым в использовании, если кто-то может сделать рекомендацию.

ответ

7

Без массового копирования он также будет работать .. попробовать это будет работать 100% для .csv и .xlsx как ... Я использую его ..

string header = "No"; 
    string sql = string.Empty; 
    DataTable dt = new DataTable(); 
    string pathOnly = string.Empty; 
    string fileName = string.Empty; 

    pathOnly = Path.GetDirectoryName(path); 
    fileName = Path.GetFileName(path); 

    if (IsFirstRowHeader) { header = "Yes"; }  

String cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=" + header + ";IMEX=1;\""; 

    OleDbConnection con = new OleDbConnection(cs); 
    if (con.State == ConnectionState.Closed) con.Open(); 

     #region use to find sheet and fire query on sheetname 
     DataTable dtsheets = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

     String[] excelSheets = new String[dtsheets.Rows.Count]; 
     int i = 0; 
     // Add the sheet name to the string array. 
     foreach (DataRow row in dtsheets.Rows) 
     { 
      excelSheets[i] = row["TABLE_NAME"].ToString(); 
      i++; 
     } 
     if (extension == ".csv") sql = "SELECT * FROM [" + fileName + "]"; 
     else sql = "SELECT * FROM [" + excelSheets[0] + "]"; 
     #endregion 

    OleDbCommand command = new OleDbCommand(sql, con); 
    OleDbDataAdapter adapter = new OleDbDataAdapter(command); 
    dt.Locale = CultureInfo.CurrentCulture; 
    adapter.Fill(dt); 
    con.Close(); 
Смежные вопросы