Je hebt te maken met een HttpPostedFile; dit is het bestand dat wordt "geupload" naar de webserver. Je moet dat bestand echt ergens opslaan en dan gebruiken, want...
...in jouw geval is het toevallig dat je je website host op dezelfde machine als het bestand, dus het pad is toegankelijk. Zodra u uw site op een andere machine implementeert, zal uw code niet werken.
Verdeel dit in twee stappen:
1) Sla het bestand ergens op - het is heel gebruikelijk om dit te zien:
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);
Nu heb je je bestand lokaal en kan het echte werk worden gedaan.
2) Haal de gegevens uit het bestand. Uw code zou moeten werken zoals het is, maar u kunt uw verbindingsreeks eenvoudig op deze manier schrijven:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
Je kunt dan nadenken over het verwijderen van het bestand dat je zojuist hebt geüpload en geïmporteerd.
Om een meer concreet voorbeeld te geven, kunnen we uw code op twee manieren herstructureren:
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;
}
U kunt dan eenvoudig SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
aanroepen.
Overweeg om de andere Uitgebreide eigenschappen te bekijken voor uw Excel-verbindingsreeks. Ze komen van pas!
Andere verbeteringen die u mogelijk wilt aanbrengen, zijn onder meer het plaatsen van uw Sql Database-verbindingsreeks in config en het toevoegen van de juiste afhandeling van uitzonderingen. Beschouw dit voorbeeld alleen als demonstratie!