Sie haben es mit einem HttpPostedFile zu tun; Dies ist die Datei, die auf den Webserver "hochgeladen" wird. Sie müssen diese Datei wirklich irgendwo speichern und dann verwenden, weil...
... in Ihrem Fall ist es einfach so, dass Sie Ihre Website auf demselben Computer hosten, auf dem sich die Datei befindet, sodass auf den Pfad zugegriffen werden kann. Sobald Sie Ihre Website auf einem anderen Computer bereitstellen, wird Ihr Code nicht funktionieren.
Teilen Sie dies in zwei Schritte auf:
1) Speichern Sie die Datei irgendwo - das sieht man sehr häufig:
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);
Jetzt haben Sie Ihre Datei lokal und die eigentliche Arbeit kann erledigt werden.
2) Holen Sie sich die Daten aus der Datei. Ihr Code sollte so funktionieren, wie er ist, aber Sie können Ihre Verbindungszeichenfolge einfach so schreiben:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
Sie können dann darüber nachdenken, die gerade hochgeladene und importierte Datei zu löschen.
Um ein konkreteres Beispiel zu geben, können wir Ihren Code in zwei Methoden umgestalten:
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;
}
Sie könnten dann einfach SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
aufrufen
Sehen Sie sich die anderen erweiterten Eigenschaften an für Ihre Excel-Verbindungszeichenfolge. Sie sind nützlich!
Andere Verbesserungen, die Sie möglicherweise vornehmen möchten, umfassen das Einfügen Ihrer SQL-Datenbank-Verbindungszeichenfolge in die Konfiguration und das Hinzufügen einer ordnungsgemäßen Ausnahmebehandlung. Bitte betrachten Sie dieses Beispiel nur zu Demonstrationszwecken!