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 都不匹配的主要内容,如果未能解决你的问题,请参考以下文章
通过 perl 在 sqlhosts 中的 Informix dbserver 连接