Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tải lên trang tính Excel và nhập dữ liệu vào cơ sở dữ liệu SQL Server

Bạn đang xử lý một HttpPostedFile; đây là tệp được "tải lên" máy chủ web. Bạn thực sự cần lưu tệp đó ở đâu đó và sau đó sử dụng nó, bởi vì ...

... trong trường hợp của bạn, rất có thể xảy ra khi bạn đang lưu trữ trang web của mình trên cùng một máy có tệp đó, vì vậy đường dẫn có thể truy cập được. Ngay sau khi bạn triển khai trang web của mình cho một máy khác, mã của bạn sẽ không hoạt động.

Hãy chia việc này thành hai bước:

1) Lưu tệp ở đâu đó - bạn thấy điều này rất phổ biến:

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

Bây giờ bạn có tệp cục bộ của mình và công việc thực sự có thể được thực hiện.

2) Lấy dữ liệu từ tệp. Mã của bạn sẽ hoạt động như cũ nhưng bạn có thể chỉ cần viết chuỗi kết nối của mình theo cách này:

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

Sau đó, bạn có thể nghĩ đến việc xóa tệp bạn vừa tải lên và nhập.

Để cung cấp một ví dụ cụ thể hơn, chúng tôi có thể cấu trúc lại mã của bạn thành hai phương pháp:

    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;

    }

Sau đó, bạn có thể chỉ cần gọi SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));

Cân nhắc xem lại Thuộc tính mở rộng khác cho chuỗi kết nối Excel của bạn. Chúng rất hữu ích!

Các cải tiến khác mà bạn có thể muốn thực hiện bao gồm đặt chuỗi kết nối Cơ sở dữ liệu Sql của bạn vào cấu hình và thêm xử lý ngoại lệ thích hợp. Vui lòng xem ví dụ này chỉ để minh chứng!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy tên cơ sở dữ liệu mà tôi được kết nối thông qua Hibernate?

  2. Cách kết nối với SQL Server với xác thực cửa sổ từ Node.JS bằng mô-đun mssql

  3. T-SQL Subquery Max (Date) và Joins

  4. SQL Server, Python và OS X

  5. Tôi có thể chỉ định tệp sql đầu vào bằng bcp không?