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!