我正在asp.net 4.5解决方案中运行以下代码,它给了我错误:
Microsoft Jet数据库引擎无法打开文件“”。它是 已经由另一个用户专门打开,或者您需要获得许可才能 查看其数据。
代码如下:
private static string FileConnectionString(string filePath)
{
return string.Format(WebConfigurationManager.AppSettings["DataFileCSV"].ToString(), filePath);
}
string DataUploadFolder = WebConfigurationManager.AppSettings["DataFileUploadFolder"].ToString();
string filePath = HttpContext.Current.Server.MapPath(DataUploadFolder);
OleDbConnection fileConnection = new OleDbConnection(FileConnectionString(filePath));
try
{
fileConnection.Open();
string columnList = "Col1, Col2, Col3, Col4, Col5";
DataTable fileDataTable = new DataTable();
OleDbCommand command = new OleDbCommand(string.Format("SELECT {0} FROM [{1}]",
columnList,
FileUploadControl.FileName),
fileConnection);
OleDbDataAdapter da = new OleDbDataAdapter(command);
da.Fill(fileDataTable); //Exception occurs here !!
}
catch (Exception ex)
{
}
finally
{
fileConnection.Close();
}
Web.config:
<add key="DataFileCSV" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=Yes;FMT=Delimited';" />
请注意,CSV文件未在任何地方打开。实际上没有打开文件,只有Visual Studio是打开的。我可以打开文件,也可以更改并保存它。 “所有人”对该文件具有“完全控制”权限。
我看不到错误发生的原因,找不到解决方法。看到许多页面出现此错误,但到目前为止没有解决方案。任何帮助将不胜感激。
编辑:在aspx中,我使用:<asp:FileUpload ID="FileUploadControl" runat="server" Width="400px" />
答案 0 :(得分:0)
经过一天的研究,终于找到了解决方法。
需要遵循两个步骤:
1-通过使用OleDBConnection,事实证明您无法从原始文件读取,因为一旦打开文件连接,它将开始使用上载的文件。这迫使我们将文件复制到另一个临时位置。因此,在代码中添加检查行。
FileUploadControl.SaveAs(filePath + fileName); //This is the line
OleDbConnection fileConnection = new OleDbConnection(FileConnectionString(filePath, fileName));
fileConnection.Open();
这是在做什么,我正在从桌面上载一个文件以读取数据,但是应用程序首先将其复制到另一个位置,然后从副本中读取数据,而不是原始数据。
2-临时位置(文件夹)应具有NETWORK SERVICE作为用户。转到文件夹设置->安全->添加用户->添加具有读写权限的网络服务。
然后,您会很高兴。感谢@Bran和@techturtle在评论中启发我。
答案 1 :(得分:-1)
您的问题可能归结为不良的异常处理。就在示例代码中,您吞下了异常,不要记录异常的内容并继续处理致命的异常。这些都是异常处理的致命错误。而且我认为您的其余代码也有类似的问题。
这些异常通常是由于未正确关闭FileHandles而引起的。 Wich确实直接与异常处理联系在一起。因此,我只能像往常一样链接这两篇文章,希望您能从他们的忠告中找到解决问题的方法: