Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Carregar uma planilha do Excel e importar os dados para o banco de dados SQL Server


Você está lidando com um HttpPostedFile; este é o arquivo que é "enviado" para o servidor web. Você realmente precisa salvar esse arquivo em algum lugar e depois usá-lo, porque...

...na sua instância, acontece que você está hospedando seu site na mesma máquina em que o arquivo reside, então o caminho é acessível. Assim que você implantar seu site em uma máquina diferente, seu código não funcionará.

Divida isso em duas etapas:

1) Salve o arquivo em algum lugar - é muito comum ver isso:
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);

Agora você tem seu arquivo localmente e o trabalho real pode ser feito.

2) Obtenha os dados do arquivo. Seu código deve funcionar como está, mas você pode simplesmente escrever sua string de conexão desta maneira:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);

Você pode pensar em excluir o arquivo que acabou de enviar e importar.

Para fornecer um exemplo mais concreto, podemos refatorar seu código em dois métodos:
    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;

    }

Você pode simplesmente chamar SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Considere analisar as outras Propriedades estendidas para sua cadeia de conexão do Excel. Eles são úteis!

Outras melhorias que você pode querer fazer incluem colocar sua string de conexão do banco de dados SQL na configuração e adicionar tratamento de exceção adequado. Por favor, considere este exemplo apenas para demonstração!