gpt4 book ai didi

c# - 无法使用 .Net 客户端访问嵌入式 Firebird 数据库服务器

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:02 25 4
gpt4 key购买 nike

无法使用 .Net 客户端访问嵌入式 Firebird 数据库服务器

我的目标是开发一个使用嵌入式 Firebird 服务器的程序,但在尝试使用 .Net 客户端建立连接时遇到错误。我听从了多个线程的建议以使其正常工作,但我无法弄清楚。我已尝试更改连接字符串和文件,但仍然出现相同的错误。

这里详细解释了我的研究和我迄今为止所做的一切尝试:

  1. How to connect and use Firebird db embedded server with Visual C# 2010

    我下载了链接中指定的文件,按照步骤运行代码,得到了与原始发布者相同的错误消息:

    FirebirdSql.Data.FirebirdClient.FbException Message=Unable to complete network request to host "127.0.0.1".

    使用“localhost”代替 IP 会产生同样的错误。

    可接受的答案是确保所有 .dll 和配置文件都复制到我的项目文件(包含代码的目录)和输出目录(bin/debug),我已经这样做了。我复制了 zip 文件夹中的每个文件。此外,@Robin Van Persi 声明不使用“紧凑型 .Net 数据提供程序”,我怎么知道我是否在使用它?我从问题中的链接下载了文件。

    @PlageMan 提供的另一个答案是添加 ServerType=1;到连接字符串并删除产生这些错误的 DataSource 和 Port 属性:

    FbConnection con = new FbConnection("User=SYSDBA;Password=masterkey;Database=TEST.FDB;Dialect=3;Charset=UTF8;ServerType=1;");

    System.NotSupportedException Message=Specified server type is not correct.

    FbConnection con = new FbConnection("User=SYSDBA;Password=masterkey;Database=TEST.FDB;Dialect=3;Charset=UTF8;");

    System.ArgumentException Message=An invalid connection string argument has been supplied or a required connection string argument has not been supplied.

    @Toastgeraet 的最后一个回答添加了将 fbembed.dll 重命名为 fbclient.dll 或 gds32.dll。三种方式我都试过了,没有变化。事实上http://www.firebirdsql.org/en/firebird-net-provider-faq/说 fbembded.dll 但这也不起作用。

  2. How to solve connection error in c# while using firebird embeded database?

    对于将 fbembed.dll 重命名为 fbclient.dll 也有相同的建议,这对原始发布者也不起作用。连接字符串中接受的答案 ServerType=1,但@cincura.net 答案下的评论给了我一个新的调查可能性;处理器架构。不幸的是,在 64bt 和 32 位版本之间切换没有任何区别。

    我认为切换到 32 位版本可能是答案,因为我使用的是 Visual Studios Express。

  3. Error in using Embeded Firebird

    这个帖子的最后一条评论是另一个人说换成 32 位也没有解决问题。

  4. Trying to use the firebird embedded server - Specified server type is not correct

    我回去查找有关 ServerType 的信息,因为我看到它是 1 和 0 并找到了这篇文章。 @Nigel 的回答是更新到最新版本的 .Net 提供商。不幸的是,我不知道如何使用 Firebird 网站上的最新版本 (4.5.1.0),因为它缺少示例中的 FirebirdSql 命名空间。此外,Visual Studios 会警告我在导入 .Net 时目标版本错误。

我做错了什么?我是否需要使用不同的连接字符串或新版本的 Firebird/.Net 提供程序?我还缺少其他东西吗?

我意识到这个问题可能被认为是重复的,但到目前为止我找到的答案都没有解决我的问题。此外,我在上面引用的以前的 StackOverflow Q/A 都是多年以前的,所以我希望有人可以分享新信息。

最佳答案

我刚刚创建了一个非常基本的程序来测试从 C# 嵌入的 Firebird。您需要添加最新的 FirebirdSql.Data.FirebirdClient nuget 包 (4.5.1.0),并将 Firebird 嵌入式压缩包的全部内容放入与.exe.

请注意,您需要匹配应用程序的位数:

AnyCPU 似乎相当棘手。当我将可执行文件编译为 AnyCPU 并在 64 位机器上运行时,它在与 Firebird Embedded 64 位结合使用时给出了 BadImageFormatException,但与 Firebird Embedded 32 位一起工作;这与我的预期相反。

class Program
{
private const string DefaultDatabase = @"D:\data\db\employee.fdb";

static void Main(string[] args)
{
string database = args.Length > 0 ? args[0] : DefaultDatabase;
var test = new TestEmbedded(database);

test.RunTestQuery();

Console.ReadLine();
}
}

class TestEmbedded
{
private readonly string connectionString;

public TestEmbedded(string database)
{
var connectionStringBuilder = new FbConnectionStringBuilder();
connectionStringBuilder.Database = database;
connectionStringBuilder.ServerType = FbServerType.Embedded;
connectionStringBuilder.UserID = "sysdba";

connectionString = connectionStringBuilder.ToString();

Console.WriteLine(connectionString);
}

internal void RunTestQuery()
{
using (var connection = new FbConnection(connectionString))
using (var command = new FbCommand("select 'success' from RDB$DATABASE", connection))
{
Console.WriteLine("Connecting...");
if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}

Console.WriteLine("Executing query");
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
}
}
}

这个程序生成的连接字符串是:

initial catalog=D:\data\db\employee.fdb;server type=Embedded;user id=sysdba

这似乎是连接所需的最低要求。请注意,虽然 Firebird embedded on windows 不执行任何身份验证,但需要提供 user id,否则会触发受信任的身份验证,这不适用于 Firebird embedded。

关于c# - 无法使用 .Net 客户端访问嵌入式 Firebird 数据库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com