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!