Click here to Skip to main content
15,884,629 members
Articles / Web Development / ASP.NET
Tip/Trick

SQL Import Data from Excel

Rate me:
Please Sign up or sign in to vote.
3.86/5 (5 votes)
21 Apr 2012CPOL1 min read 49.6K   5.1K   6  
Excel sheet to SQL DB
This is an old version of the currently published tip/trick.

Introduction

This article shows how to import bulk data from excel file to sql db using office open xml sdk 2.0.

Background

  1. Create a table in SQL. Let the table name be ImportFromXL.
    Image 1
  2. Create a sample excel file, which will have the same number of columns as in the table ImportFromXL. As you can see, the first row is named as 'Data', this is because, the column name in the table is 'Data'
    Image 2

Code Walk-Through

  1. Create a simple aspx page, add a FileUpload control and a Button. Choose an excel file from the system, and click Upload button.

    Image 3

    onclick of Upload, the following code gets executed.
    if (fCtrl.HasFile)
    {
        Stream fileStream = fCtrl.FileContent;
        new ExcelHelper().Upload(fileStream);
    }
    

    ExcelHelper, Upload method would look like,
    // convert excel sheet into DataTable
    DataTable table = SheetToTable(fileStream);
    // send table to DataHelper to upload data into the DB.
    new DataHelper().UploadToDb(table);
    

    SheetToTable method converts excel sheet into a data table,

    DataTable table = new DataTable();
    using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Open(fileStream, false))
    {
       SheetData sheetData = excelDoc.WorkbookPart.WorksheetParts.ElementAt(0).Worksheet.ChildElements.OfType<SheetData>().ElementAt(0);
       List<string> siList = new List<string>();
       excelDoc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.OfType<SharedStringItem>().ToList().ForEach(si =>
         {
             siList.Add(si.Text.Text);
         });
       // create columns
       // populate rows
         return table;
    }
    

    This table is then sent to UploadToDb, where the DataRow is converted to ImportToExcel entity and saved into the DB. Entity Model is used in this sample to write the data into DB.

    using (ImportEntities context = new ImportEntities())
    {
        foreach (DataRow row in table.Rows)
        {
            context.AddToImportFromXLs(new ImportFromXL()
            {
                Data = row["Data"].ToString()
            });
        }
        context.SaveChanges();
    }
    

    So, the data is finally saved in db, and the process gets completed.

    Image 4

    I have attached a sample solution and also the script for creating the table in DB.

Configuration

Change the DB connection string in web.config

<connectionStrings>
    <add name="ImportEntities"           
 connectionString="metadata=res://*/Data.ImportModel.csdl|res://*/Data.ImportModel.ssdl|res://*/Data.ImportModel.msl;provider=System.Data.SqlClient;
         provider connection string=&quot;data source=localhost;initial catalog=TestDb;integrated security=True;multipleactiveresultsets=True;
         App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
  </connectionStrings> 

Why OOXML ???

SQL import from excel can also be accomplished using Microsoft ACE Engine, which requires the software to be installed on the server. This can be avoided by using Office Open Xml, which is slightly faster than the other approach.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

Discussions on this specific version of this article. Add your comments on how to improve this article here. These comments will not be visible on the final published version of this article.