sql >> Databasteknik >  >> RDS >> Sqlserver

Ladda upp ett Excel-ark och importera data till SQL Server-databas

Du har att göra med en HttpPostedFile; detta är filen som "laddas upp" till webbservern. Du måste verkligen spara den filen någonstans och sedan använda den, eftersom...

...i ditt fall råkar det vara så att du är värd för din webbplats på samma maskin som filen finns, så sökvägen är tillgänglig. Så fort du distribuerar din webbplats till en annan dator kommer din kod inte att fungera.

Dela upp detta i två steg:

1) Spara filen någonstans - det är mycket vanligt att se detta:

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 och det verkliga arbetet kan göras.

2) Hämta data från filen. Din kod bör fungera som den är men du kan helt enkelt skriva din anslutningssträng så här:

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

Du kan sedan tänka på att ta bort filen du just har laddat upp och importerat.

För att ge ett mer konkret exempel kan vi omstrukturera din kod i två 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 helt enkelt anropa SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Överväg att granska de andra Utökade egenskaperna för din Excel-anslutningssträng. De kommer till nytta!

Andra förbättringar du kanske vill göra inkluderar att sätta din SQL Database-anslutningssträng i konfigurationen och lägga till korrekt undantagshantering. Beakta detta exempel endast för demonstration!



  1. Hur RPAD()-funktionen fungerar i MySQL

  2. Kapacitetsplanering med hjälp av resultatdata

  3. Flera radvärden i en enda rad

  4. MYSQL Välj MAX-datum i ett sammanfogningsmeddelande