Du har at gøre med en HttpPostedFile; dette er den fil, der "uploades" til webserveren. Du skal virkelig gemme den fil et sted og derefter bruge den, fordi...
...i dit tilfælde er det tilfældigvis, at du hoster dit websted på den samme maskine, som filen ligger i, så stien er tilgængelig. Så snart du implementerer dit websted til en anden maskine, vil din kode ikke fungere.
Opdel dette i to trin:
1) Gem filen et sted - det er meget almindeligt at se dette:
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 har du din fil lokalt, og det rigtige arbejde kan udføres.
2) Hent dataene fra filen. Din kode burde fungere som den er, men du kan simpelthen skrive din forbindelsesstreng på denne måde:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
Du kan derefter overveje at slette den fil, du lige har uploadet og importeret.
For at give et mere konkret eksempel kan vi omstrukturere din kode til to metoder:
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;
}
Du kan ganske enkelt derefter kalde SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
Overvej at gennemgå de andre Udvidede egenskaber for din Excel-forbindelsesstreng. De kommer til nytte!
Andre forbedringer, du måske ønsker at lave, inkluderer at sætte din SQL-databaseforbindelsesstreng i config og tilføje korrekt undtagelseshåndtering. Overvej venligst dette eksempel kun til demonstration!