Máte co do činění s HttpPostedFile; toto je soubor, který je "nahrán" na webový server. Opravdu potřebujete ten soubor někam uložit a pak ho použít, protože...
...ve vašem případě je to tak, že hostujete svůj web na stejném počítači, na kterém se nachází soubor, takže cesta je přístupná. Jakmile nasadíte svůj web na jiný počítač, váš kód nebude fungovat.
Rozdělte to do dvou kroků:
1) Uložte soubor někam – je velmi běžné vidět toto:
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);
Nyní máte svůj soubor lokálně a můžete dělat skutečnou práci.
2) Získejte data ze souboru. Váš kód by měl fungovat tak, jak je, ale svůj připojovací řetězec můžete jednoduše napsat takto:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
Poté můžete přemýšlet o smazání souboru, který jste právě nahráli a importovali.
Abychom uvedli konkrétnější příklad, můžeme váš kód refaktorovat do dvou metod:
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;
}
Můžete jednoduše zavolat SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
Zvažte kontrolu dalších Rozšířených vlastností pro váš připojovací řetězec aplikace Excel. Přijdou užitečné!
Mezi další vylepšení, která můžete chtít provést, patří vložení připojovacího řetězce databáze SQL do konfigurace a přidání správného zpracování výjimek. Berte prosím tento příklad pouze jako demonstraci!