Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Téléchargement d'une feuille Excel et importation des données dans la base de données SQL Server

Vous avez affaire à un HttpPostedFile ; c'est le fichier qui est "téléchargé" sur le serveur web. Vous devez vraiment enregistrer ce fichier quelque part, puis l'utiliser, car...

... dans votre cas, il se trouve que vous hébergez votre site Web sur la même machine que le fichier, de sorte que le chemin est accessible. Dès que vous déployez votre site sur une machine différente, votre code ne fonctionnera pas.

Décomposez cela en deux étapes :

1) Enregistrez le fichier quelque part - il est très courant de voir ceci :

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

Maintenant, vous avez votre fichier localement et le vrai travail peut être fait.

2) Obtenez les données du fichier. Votre code devrait fonctionner tel quel, mais vous pouvez simplement écrire votre chaîne de connexion de cette façon :

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

Vous pouvez alors penser à supprimer le fichier que vous venez de télécharger et d'importer.

Pour donner un exemple plus concret, nous pouvons refactoriser votre code en deux méthodes :

    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;

    }

Vous pouvez alors simplement appeler SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Pensez à consulter les autres propriétés étendues pour votre chaîne de connexion Excel. Ils sont utiles !

D'autres améliorations que vous voudrez peut-être apporter incluent la mise en place de votre chaîne de connexion à la base de données Sql dans la configuration et l'ajout d'une gestion appropriée des exceptions. Veuillez considérer cet exemple uniquement à des fins de démonstration !