Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przesyłanie arkusza Excel i importowanie danych do bazy danych SQL Server

Masz do czynienia z HttpPostedFile; jest to plik, który jest „przesyłany” na serwer WWW. Naprawdę musisz gdzieś zapisać ten plik, a następnie go użyć, ponieważ...

... w twoim przypadku tak się składa, że ​​hostujesz swoją witrynę na tym samym komputerze, na którym znajduje się plik, więc ścieżka jest dostępna. Gdy tylko wdrożysz swoją witrynę na innym komputerze, Twój kod przestanie działać.

Podziel to na dwa kroki:

1) Zapisz gdzieś plik — bardzo często można to zobaczyć:

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

Teraz masz swój plik lokalnie i możesz wykonać prawdziwą pracę.

2) Pobierz dane z pliku. Twój kod powinien działać tak, jak jest, ale możesz po prostu napisać parametry połączenia w ten sposób:

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

Następnie możesz pomyśleć o usunięciu pliku, który właśnie przesłałeś i zaimportowałeś.

Aby podać bardziej konkretny przykład, możemy zrefaktoryzować Twój kod na dwie metody:

    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;

    }

Możesz po prostu wywołać SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Rozważ zapoznanie się z innymi Właściwościami rozszerzonymi dla parametrów połączenia programu Excel. Przydają się!

Inne ulepszenia, które możesz chcieć wprowadzić, obejmują umieszczenie parametrów połączenia bazy danych Sql w konfiguracji i dodanie odpowiedniej obsługi wyjątków. Rozważ ten przykład tylko w celach demonstracyjnych!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie mechanizmy szyfrowania oferuje SQL Server 2008 Standard?

  2. Używanie SQL Server jako kolejki DB z wieloma klientami

  3. Liczba dni pozostałych w bieżącym miesiącu

  4. Odświeżanie metadanych funkcji użytkownika t-SQL

  5. Wystąpiła nieprawidłowa operacja zmiennoprzecinkowa