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

Caricamento di un foglio Excel e importazione dei dati nel database di SQL Server

Hai a che fare con un HttpPostedFile; questo è il file che viene "caricato" sul server web. Hai davvero bisogno di salvare quel file da qualche parte e poi usarlo, perché...

... nella tua istanza, succede che stai ospitando il tuo sito Web sulla stessa macchina in cui risiede il file, quindi il percorso è accessibile. Non appena esegui il deployment del tuo sito su un altro computer, il tuo codice non funzionerà.

Suddividilo in due passaggi:

1) Salva il file da qualche parte - è molto comune vedere questo:

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);

Ora hai il tuo file in locale e il vero lavoro può essere fatto.

2) Ottieni i dati dal file. Il tuo codice dovrebbe funzionare così com'è, ma puoi semplicemente scrivere la tua stringa di connessione in questo modo:

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

Puoi quindi pensare di eliminare il file che hai appena caricato e importato.

Per fornire un esempio più concreto, possiamo refactoring del codice in due metodi:

    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;

    }

Puoi semplicemente chiamare SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Valuta la possibilità di esaminare le altre Proprietà estese per la stringa di connessione di Excel. Tornano utili!

Altri miglioramenti che potresti voler apportare includono l'inserimento della stringa di connessione del database SQL nella configurazione e l'aggiunta di una corretta gestione delle eccezioni. Si prega di considerare questo esempio solo a scopo dimostrativo!