我在 4.5 解决方案中运行 asp.net 以下代码,它给了我错误:
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();
}
网络配置:
<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" />
在这个问题上花了一天时间后,我终于找到了解决方案。
需要遵循两个步骤:
1-通过使用OleDBConnection,事实证明您无法从原始文件中读取,因为一旦打开文件连接,它就会开始使用上传的文件。这促使我们将文件复制到另一个临时位置。因此,在代码中添加检查行。
FileUploadControl.SaveAs(filePath + fileName); //This is the line
OleDbConnection fileConnection = new OleDbConnection(FileConnectionString(filePath, fileName));
fileConnection.Open();
它正在做什么,我正在从我的桌面上传一个文件来读取数据,但应用程序首先将其复制到另一个位置,然后从副本中读取数据而不是原始数据。
2-临时位置(文件夹)应具有网络服务作为用户。转到文件夹设置 -> 安全 -> 添加用户 -> 添加具有读写权限的网络服务。
然后,你就可以走了。感谢@Bran和@techturtle在评论中启发我。
您的问题可能归结为糟糕的异常处理。在示例代码中,您吞下异常,不要记录其内容并在致命异常之后继续。其中任何一个都是异常处理的致命错误。而且我认为您的其余代码也有类似的问题。
这些类型的操作通常来自未正确关闭文件句柄。Wich 确实直接与异常处理相关联。所以我只能像以前经常做的那样链接这两篇文章,并希望你能在他们的广告之后找到解决问题的方法:
- https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/
- https://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET