Estás tratando con un HttpPostedFile; este es el archivo que se "carga" en el servidor web. Realmente necesita guardar ese archivo en algún lugar y luego usarlo, porque...
... en su caso, resulta que está alojando su sitio web en la misma máquina en la que reside el archivo, por lo que se puede acceder a la ruta. Tan pronto como implemente su sitio en una máquina diferente, su código no funcionará.
Divide esto en dos pasos:
1) Guarde el archivo en algún lugar; es muy común ver esto:
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);
Ahora tiene su archivo localmente y se puede hacer el trabajo real.
2) Obtener los datos del archivo. Su código debería funcionar como está, pero simplemente puede escribir su cadena de conexión de esta manera:
string excelConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties="Excel 12.0";", filePath);
Luego puede pensar en eliminar el archivo que acaba de cargar e importar.
Para proporcionar un ejemplo más concreto, podemos refactorizar su código en dos métodos:
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;
}
Simplemente puede llamar a SaveFileToDatabase(GetLocalFilePath(@"C:\temp\uploads", FileUpload1));
Considere revisar las otras Propiedades extendidas para su cadena de conexión de Excel. ¡Son útiles!
Otras mejoras que quizás desee realizar incluyen poner la cadena de conexión de la base de datos Sql en la configuración y agregar el manejo de excepciones adecuado. ¡Considere este ejemplo solo como demostración!