sql >> Database teknologi >  >> RDS >> Sqlserver

Upload af et Excel-ark og import af data til SQL Server-database

Du har at gøre med en HttpPostedFile; dette er den fil, der "uploades" til webserveren. Du skal virkelig gemme den fil et sted og derefter bruge den, fordi...

...i dit tilfælde er det tilfældigvis, at du hoster dit websted på den samme maskine, som filen ligger i, så stien er tilgængelig. Så snart du implementerer dit websted til en anden maskine, vil din kode ikke fungere.

Opdel dette i to trin:

1) Gem filen et sted - det er meget almindeligt at se dette:

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 har du din fil lokalt, og det rigtige arbejde kan udføres.

2) Hent dataene fra filen. Din kode burde fungere som den er, men du kan simpelthen skrive din forbindelsesstreng på denne måde:

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

Du kan derefter overveje at slette den fil, du lige har uploadet og importeret.

For at give et mere konkret eksempel kan vi omstrukturere din kode til to metoder:

    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;

    }

Du kan ganske enkelt derefter kalde SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Overvej at gennemgå de andre Udvidede egenskaber for din Excel-forbindelsesstreng. De kommer til nytte!

Andre forbedringer, du måske ønsker at lave, inkluderer at sætte din SQL-databaseforbindelsesstreng i config og tilføje korrekt undtagelseshåndtering. Overvej venligst dette eksempel kun til demonstration!



  1. PgBouncer 1.7 - "Farver varierer efter opstandelse"

  2. Alias ​​et kolonnenavn på en venstre joinforbindelse

  3. hvad forhindrer PHP i at oprette forbindelse til min MySQL-database?

  4. Rails 4 custom 404 forårsager postgresql-forbindelsesfejl på Heroku