通过C#

时间:2019-01-17 14:47:08

标签: c# asp.net oledbconnection asp.net-4.5

我正在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" />

2 个答案:

答案 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确实直接与异常处理联系在一起。因此,我只能像往常一样链接这两篇文章,希望您能从他们的忠告中找到解决问题的方法: