我最近使用它,在 Visual Studio 中,我可以将 Firebird 视为数据提供程序。
我正在从事的项目我正在尝试让 Firebird 的嵌入式版本在我的 c# 程序中使用
但是,当我转到工具/连接到数据库时 选择firebird 数据源我输入以下内容
数据来源:Firebird Data Source(firebird的.net框架数据提供者) 数据来源:为空 数据源端口:3050 方言:3 字符集:无 数据库:我的 fdb 文件的路径 服务器类型:嵌入式 user: 我设置的用户名 password:我设置的密码 作用:为空
当我点击测试连接时,它立即弹出访问被拒绝的消息。
关于可能导致此问题的原因有什么想法吗?
感谢您的帮助。
最佳答案
数据库的嵌入式版本以独占模式(拒绝读取、拒绝写入)打开数据库文件,服务器版本做同样的事情。
这是设计,两个不同的数据库进程之间无法协调以允许打开该文件并在并发环境中成功执行读/写操作。如果要允许不同的进程访问数据库,则必须连接到 Firebird 产品的服务器版本。
对于您的开发环境也是如此。如果您使用嵌入式将 IDE 连接到数据库,然后也使用嵌入式执行您的应用程序,应用程序将收到拒绝访问错误,因为文件将由 IDE 打开。您可能知道,IDE 和您的应用程序实际上是不同的进程。
其他可能的情况是,当您从 FlameRobin 或任何其他工具(使用服务器版本或嵌入式工具)使用此数据库,然后您尝试使用嵌入式版本从 IDE 打开连接。
正因为如此,在开发环境中使用嵌入式版本不是一个好主意。
我所做的是总是在那里使用本地服务器。这样,我可以将我的 IDE 数据库工具连接到数据库(很少,但有时我会这样做),任何其他工具,如 isql、IBExpert、FlameRobin,我可以保持我项目的打开连接并运行以毫无问题地进行测试/调试.
然后,如果应用程序将在生产中使用嵌入式版本,我会在测试/问答阶段以及生产中切换到该版本。
我没有使用 Visual Studio 或 .NET 中的 Firebird,所以我不确定 Server Type: Embedded
参数的含义是什么,或者驱动程序如何在服务器和嵌入式之间进行选择,但无论它是什么,您只需在发布版本中更改它,而在调试版本中使用服务器。
现在,我必须承认,我在这个答案的开头撒谎,实际上使用经典服务器,有几个进程(每个连接的客户端一个)访问数据库。我不确定他们如何在不同进程之间共享对该文件的访问权限(也许有一个读/写进程,我不知道,现在,我真的不在乎),那是另一个故事并且不会改变我之前说的。
关于c# - 尝试在 Visual Studio 中连接到 Firebird 时出现访问被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505675/