我最近有这样的工作,在Visual Studio中,我可以看到Firebird作为数据提供者。
我正在研究的项目我试图让Firebird的嵌入版本在我的c#程序中使用
但是,当我转到Tools / Connect to Database时 选择firebird数据源我输入以下内容
数据源:Firebird数据源(firebird的.net框架数据提供程序) 数据来源:空白 数据源端口:3050 方言:3 charSet:没有 数据库:我的fdb文件的路径 服务器类型:嵌入式 user:用户名我设置 密码:密码我设置 角色:是空白的
当我点击测试连接时,会立即弹出该访问被拒绝的情况。
关于可能导致这种情况的任何想法?
谢谢你的帮助。
答案 0 :(得分:2)
数据库的嵌入式版本以独占模式打开数据库文件(DenyRead,DenyWrite),服务器版本做同样的事情。
那是按设计,两个不同的数据库进程之间无法协调,以允许在并发环境中打开该文件并成功执行读/写操作。如果要允许不同进程访问数据库,则必须连接到Firebird产品的服务器版本。
您的开发环境也是如此。如果使用嵌入式将IDE连接到数据库,然后使用嵌入式执行应用程序,则应用程序将获得拒绝访问错误,因为该文件将由IDE打开。您可能知道,IDE和您的应用程序实际上是不同的过程。
其他可能的情况是,当您使用FlameRobin或任何其他工具(使用服务器版本或嵌入式工具)处理此数据库时,您尝试使用嵌入式版本从IDE打开连接。
正因为如此,在开发环境中使用嵌入式版本是个坏主意。
我所做的是始终使用本地服务器。这样,我可以将我的IDE数据库工具连接到数据库(很少,但有时我会这样做),任何其他工具,如isql,IBExpert,FlameRobin,我可以维护我的项目的开放连接并运行测试/调试没有问题
然后,如果应用程序将在生产中使用嵌入式版本,我会在测试/ Q& A阶段切换到该版本,当然还有生产。
我没有使用Visual Studio或.NET中的Firebird,所以我不确定Server Type: Embedded
参数的含义是什么,或者驱动程序在服务器和嵌入式服务器之间选择的方式,但不管它是什么,你必须在发布版本中更改它,同时在调试版本中使用服务器。
现在,我必须承认,我在这个答案的开头撒谎,实际上使用经典服务器,有几个进程(每个连接的客户端一个)访问数据库。我不确定他们如何在不同进程之间共享对该文件的访问权限(可能有读者/编写者进程,我不知道,现在,我真的不在乎),这是另一个故事,并没有改变我之前说过的话。
答案 1 :(得分:1)
我猜您正在尝试使用FBConnection组件进行连接,连接提示符如this
在这种情况下,您称之为“数据源”并告诉我们空白应该指向嵌入式数据库的localhost。查看我提供的链接以获取更多信息。
如果您没有使用FbConnection,请提供有关连接组件和连接字符串的更多信息。
修改强>
阅读您在评论中添加的信息,您似乎正在尝试使用ADO.NET建立与Firebird的连接(由于我没有在此计算机上安装Visual Studio,因此无法测试它),这与我的一致假设早些时候
当您配置与Firebird数据库的连接时,您正在构建连接字符串,连接组件使用该字符串来了解如何连接到数据库(请注意,这也适用于其他几个配置连接时的数据库。)
您可以找到有关连接字符串here的更多信息以及Firebird here的特定信息。
据我所知,可以通过两种方式从.NET访问Firebird:
使用ADO.NET :在这种情况下,您需要将数据源设置为localhost。我认为这是你的情况。
通过.NET使用ODBC :在这种情况下,连接看起来非常不同。您可以通过我提供的链接查看,但我怀疑这适用于您的情况。
因此,在简短版本中,请尝试将“数据源”设置为localhost。
HTH