INFORMIXSERVER 与 DBSERVERNAME 或 DBSERVERALIASES 都不匹配

Posted

技术标签:

【中文标题】INFORMIXSERVER 与 DBSERVERNAME 或 DBSERVERALIASES 都不匹配【英文标题】:INFORMIXSERVER does not match either DBSERVERNAME or DBSERVERALIASES 【发布时间】:2019-03-05 12:23:49 【问题描述】:

我已经安装了 Informix Client SDK。然后我创建了一个引用 IBM.Data.Informix.dll 的简单 .net 控制台应用程序。当我调用IfxConnection.Open() 时,它会引发异常。

错误 [HY000] [Informix .NET 提供程序][Informix]INFORMIXSERVER 确实 不匹配 DBSERVERNAME 或 DBSERVERALIASES。 sqlerrm(数据库)

我已经看到了这个post,但我似乎无法在客户端机器中找到 sqlhosts 文件。我也不能提到帖子中的环境变量。

所以我的问题是:

    如何创建 sqlhosts 文件并将其保存在哪里?这将在数​​据库服务器或客户端计算机中,还是两者兼而有之? 需要哪些环境变量?

【问题讨论】:

你传递给IfxConnection的参数是什么?您可以在客户端没有 sqlhosts 定义的情况下连接到 Informix 实例,但您必须提供 Informix 服务器连接信息。 这是基于我在下面制作的 cmets。 Host=10.20.30.40; Service=my-service; Server=db_info; Protocol=onsoctcp; Database=mydb; User Id=testuser; Password=******; 【参考方案1】:

在 Windows 机器中,所需的配置由 Setnet32 实用程序(随 Informix Client SDK 安装)定义。您需要在该实用程序中设置 Informix 实例值,以便连接提供程序(Informix .NET 提供程序)工作。


首先在第三个选项卡中定义您的“主机信息”,然后单击应用(顺便说一句,我在西班牙 Windows 机器上!):

注意:应将“当前主机”值添加到您的主机 Windows 文件 (%WINDIR%\System32\drivers\etc\hosts)。


然后,在第二个选项卡中定义您的“服务器信息”:

IBM Informix Server 是您的 Informix 实例名称 (INFORMIXSERVER)。 主机名由上一步中定义的主机填充(第三个选项卡)。 Protocolname 是用于与您的服务器通信的协议(如果您使用的是不安全的 TCP 连接,它可能是 'olsoctcp' 或 'onsoctcp'。请参阅 the official documentation 以检查要使用的值)。李> 服务名称是用于您的服务器通信服务的名称,应将其添加到您的服务 Windows 文件中 (%WINDIR%\System32\drivers\etc\services)

在这些更改之后,您应该能够运行您的 .NET 应用程序。显然,您的连接字符串值应该与此实用程序中定义的信息相匹配。

【讨论】:

嗨@Fer Garcia 感谢您的回复。但我仍然得到同样的错误。这是我到目前为止所做的: 对于主机信息选项卡:当前主机:my.host 用户名:用户名密码选项:密码密码:密码对于我添加的主机 Windows 文件:10.20.30.40 my.host 对于服务器信息选项卡:IBM Informix 服务器:db_info 主机名:my.host 协议名:onsoctcp 服务名称:my-service 选项:k=1 对于我添加的服务 Windows 文件:my-service 1234/tcp 是否需要添加其他环境变量? @JeffreyLua,尝试使用另一种机制进行连接,例如 ODBC:创建一个新的 ODBC 连接并使用“IBM INFORMIX ODBC DRIVER”。这样,您可以首先放弃您的计算机确实与 Informix 服务器连接。 嗨@Fer Garcia,我尝试使用您提到的ODBC。我有与使用客户端 sdk 相同的错误。您还有其他建议吗? 嗨@Fer Farcia,我能够纠正前面提到的问题。服务器名和数据库名被调换了,是我的错。现在出现了一个新的错误。 Database locale information mismatch.。我已经通过 setnet32 实用程序设置了 DB_LOCALE。当我尝试使用 ODBC 数据源管理器进行连接时,我可以连接,如果我使用 .net 应用程序,我会收到错误消息。 您是如何确定 setnet32 中使用的 DB_LOCALE 值的? .NET 提供程序连接使用 setnet32 中定义的服务器连接参数,所以我在这里假设您的 ODBC 连接是允许的(不知何故),但 .NET 不喜欢这些值。

以上是关于INFORMIXSERVER 与 DBSERVERNAME 或 DBSERVERALIASES 都不匹配的主要内容,如果未能解决你的问题,请参考以下文章

传奇服务端 DBserver.exe启动报错!!!

Mysql主从同步

通过 perl 在 sqlhosts 中的 Informix dbserver 连接

连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝

oracle19crac安装grid提示权限错误

Delphi动态链接多个数据源执行操作例子