sql >> Database >  >> RDS >> Sqlserver

Een Excel-blad uploaden en de gegevens importeren in de SQL Server-database

Je hebt te maken met een HttpPostedFile; dit is het bestand dat wordt "geupload" naar de webserver. Je moet dat bestand echt ergens opslaan en dan gebruiken, want...

...in jouw geval is het toevallig dat je je website host op dezelfde machine als het bestand, dus het pad is toegankelijk. Zodra u uw site op een andere machine implementeert, zal uw code niet werken.

Verdeel dit in twee stappen:

1) Sla het bestand ergens op - het is heel gebruikelijk om dit te zien:

string saveFolder = @"C:\temp\uploads"; //Pick a folder on your machine to store the uploaded files

string filePath = Path.Combine(saveFolder, FileUpload1.FileName); 

FileUpload1.SaveAs(filePath);

Nu heb je je bestand lokaal en kan het echte werk worden gedaan.

2) Haal de gegevens uit het bestand. Uw code zou moeten werken zoals het is, maar u kunt uw verbindingsreeks eenvoudig op deze manier schrijven:

string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);

Je kunt dan nadenken over het verwijderen van het bestand dat je zojuist hebt geüpload en geïmporteerd.

Om een ​​meer concreet voorbeeld te geven, kunnen we uw code op twee manieren herstructureren:

    private void SaveFileToDatabase(string filePath)
    {
        String strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\CRMdata\\CRMdata\\App_Data\\Database1.mdf';Integrated Security=True;User Instance=True";

        String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);
        //Create Connection to Excel work book 
        using (OleDbConnection excelConnection = new OleDbConnection(excelConnString))
        {
            //Create OleDbCommand to fetch data from Excel 
            using (OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection))
            {
                excelConnection.Open();
                using (OleDbDataReader dReader = cmd.ExecuteReader())
                {
                    using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
                    {
                        //Give your Destination table name 
                        sqlBulk.DestinationTableName = "Excel_table";
                        sqlBulk.WriteToServer(dReader);
                    }
                }
            }
        } 
    }


    private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl)
    {


        string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName);

        fileUploadControl.SaveAs(filePath);

        return filePath;

    }

U kunt dan eenvoudig SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1)); aanroepen.

Overweeg om de andere Uitgebreide eigenschappen te bekijken voor uw Excel-verbindingsreeks. Ze komen van pas!

Andere verbeteringen die u mogelijk wilt aanbrengen, zijn onder meer het plaatsen van uw Sql Database-verbindingsreeks in config en het toevoegen van de juiste afhandeling van uitzonderingen. Beschouw dit voorbeeld alleen als demonstratie!



  1. Waarom echoot rlwrap overbodig wat ik typ vanaf het toetsenbord?

  2. SQLite Python

  3. Failover voor PostgreSQL-replicatie 101

  4. Is er een manier om power bi-rapporten en -dashboards in de vb.net- of C#-desktoptoepassing in te sluiten met de SQL Server 2008-database?