我是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'因为它正被另一个进程使用。
答案 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.exe
和Process Explorer
都只显示fbserver.exe
实际打开的规范(最终)文件名。
找出答案的唯一方法是:
handle.exe
或Process Explorer
确认文件确实由fbserver.exe
打开(而不是由您的流程本身使用嵌入式连接)