在我确定我的问题之前,让我告诉大家我已经在Internet上对该问题进行了足够的探索,但是没有任何文章可以帮助我解决问题。问题是,当我尝试上传excel文件并开始对其进行处理时,它会引发错误”“ Microsoft Access数据库引擎无法打开或写入该文件。该文件已由另一个用户专门打开,或者您需要权限来查看和写入其数据”。。我的代码在本地计算机上正常工作,主要问题是当我将代码上传到生产服务器时。 下面是我的代码:
if (file_Upload_DataFile.HasFile)
{
string fileName =
Path.GetFileName(file_Upload_DataFile.PostedFile.FileName);
string fileExtension = Path.GetExtension(file_Upload_DataFile.PostedFile.FileName);
if (fileExtension != ".xls" && fileExtension != ".xlsx")
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "onload", "alert('invalid file format!! you must upload a file having an extention of either (.xls) or (.xlsx)');", true);
extFlag = false;
}
string fileLocation = Server.MapPath("../ExcelReport/" + fileName);
file_Upload_DataFile.SaveAs(fileLocation);
if (fileExtension == ".xls")
{
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
extFlag = true;
}
else if (fileExtension == ".xlsx")
{
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
extFlag = true;
}
}
if (extFlag != false)
{
OleDbConnection con = new OleDbConnection(connectionString);
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = con;
OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
//DataSet ds = new DataSet();
DataTable dtExcelRecords = new DataTable();
con.Open();
DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();
cmd.CommandText = "SELECT * FROM [" + getExcelSheetName + "]";
dAdapter.SelectCommand = cmd;
dAdapter.Fill(dtExcelRecords);
con.Close();
}
注意:我正在使用MySql作为数据库。
我还为服务器上的文件夹设置了权限,该文件夹在上传后仍然存在相同的问题。