该过程无法访问文件'文件名'因为它正被另一个进程使用

时间:2015-05-15 09:08:16

标签: c# firebird filepath ioexception

我是C#的新手,我在连接到Firebird数据库时遇到问题。我希望我的程序访问Firebird数据库[FDB格式文件]。我有问题,请看下面的代码:

File.Copy(pathway, new_pathway, true);

FbConnection addDetailsConnection = new FbConnection("User=sysdba;Password=masterkey;Dialect=3;Database= " + new_pathway +
    ";DataSource=localhost;" );
string SQLCOMMAND = " SELECT UOM FROM ST_ITEM_UOM WHERE CODE = 'ANT'";

addDetailsConnection.Open();
FbCommand readCommand = new FbCommand(SQLCOMMAND, addDetailsConnection);

FbDataReader myreader = readCommand.ExecuteReader();
while (myreader.Read())
{
    MessageBox.Show(myreader[0].ToString());
}
myreader.Close();
readCommand.Dispose();
addDetailsConnection.Close();
addDetailsConnection.Dispose();

此代码让我读取我的FDB文件并提取数据。当代码第一次执行时,没有错误或问题,但是当我再次执行它时,会显示以下错误:

  

该进程无法访问文件' C:\ Users \ ACC-0001.FDB'因为它正被另一个进程使用。

2 个答案:

答案 0 :(得分:1)

您可以使用Handle来检查哪个程序正在锁定文件。它可能是由您的代码或您计算机上运行的其他进程引起的。

该工具可识别流程,例如:

  

C:> handle.exe c:\ test.xlsx

     

Handle v3.46版权所有(C)1997-2011 Mark Russinovich Sysinternals -   www.sysinternals.com

     

EXCEL.EXE pid:3596类型:文件414:C:\ test.xlsx

找到here

如果问题出在您的代码中,请确保您处置并关闭所有连接,最好在using部分内使用它们:

using (FbConnection addDetailsConnection = new FbConnection("...")) 
{
    // do work
}

有关使用using的更多详情,请访问here

答案 1 :(得分:0)

您可能遇到过这个Firebird问题:FB server reports that DB file is used by another application on secondary attachment attempt through a symlink

它只发生在Windows上,并且仅当两个非嵌入式连接使用不同的路径名时,其中一个或两个路径名在其路径中都有符号链接,因此它们有效地指向同一位置。

handle.exeProcess Explorer都只显示fbserver.exe实际打开的规范(最终)文件名。

找出答案的唯一方法是:

  1. 比较连接字符串。
  2. handle.exeProcess Explorer确认文件确实由fbserver.exe打开(而不是由您的流程本身使用嵌入式连接)