1

尝试将我的 C# 程序连接到现有的 Firebird 服务器时,我遇到了一个非常奇怪的问题。

首先,这可以通过https://github.com/FirebirdSQL/NETProvider/blob/master/Provider/docs/ado-net.md的 Firebird 文档中的默认连接示例重现

using (var connection = new FBConnection("database=192.168.0.150:c:\\Data\\demo.fdb;user=sysdba;password=m@sterkey"))
{
    connection.Open();
    using (var transaction = connection.BeginTransaction())
    {
        using (var command = new FbCommand("select * from demo", connection, transaction))
        {
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var values = new object[reader.FieldCount];
                    reader.GetValues(values);
                    Console.WriteLine(string.Join("|", values));
                }
            }
        }
    }
}

当我在我的机器上时一切正常,我还可以连接到我同事 PC 上的 Firebird 服务器。

但我无法连接到其他开发服务器上的 Firebird 服务器。我在另一个问题中找到了答案,并想告诉您服务器没有互联网访问权限。 https://stackoverflow.com/a/57569057/2785084

这是我得到的例外:

FirebirdSql.Data.FirebirdClient.FbException:“无法完成对主机的网络请求”没有找到错误代码 335544721 的消息。”

IscException:无法完成对主机的网络请求“未找到错误代码 335544721 的消息。IOException:无法从传输连接读取数据:现有连接被远程主机强制关闭

我已经更新到最新的稳定版本的 Firebird。我可以保证服务器正在运行并且没有防火墙阻止我的连接,因为当我尝试连接旧的 Delphi 程序时,一切正常。我还可以使用来自 Flamerobin.org 的轻量级 Firebird 管理工具 Flamerobin 进行连接,我认为它是用 C++ 编写的。

当我尝试与 DBeaver 连接时,我收到以下消息:

[SQLState:28000, ISC 错误代码:335544472] 您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。

我很确定用户名和密码是正确的。我不使用默认密码,而是使用带有@符号的密码,可能与此有关。

我现在有 2 个可以连接的程序(Delphi 和 C++),还有两个不能连接的程序(C# 和 Java)。有没有人有任何线索或调整如何更改我可以连接到服务器的连接?

4

1 回答 1

0

感谢 Mark Rotteveel 的评论让我找到了解决方案。
我可以使用默认密码“masterkey”进行连接,因此很明显 srp 用户是使用默认凭据创建的,因此无法与其他凭据进行连接。

我必须更正旧服务器中的用户。感谢 ADO.NET 仅支持 srp 的提示。

于 2021-03-11T12:26:03.730 回答