我正在使用.net
在c#
编写测试应用程序以连接到IBM的Informix数据库。
到目前为止我所做的是,我在我的机器上安装了Informix client sdk v4.10
。之后我写了一段代码来自here和here。在我的代码中,我引用了IBM.Data.Informix.dll
,它是从Informix client sdk's
bin文件夹netf40
的安装路径引用的。
当我运行测试应用程序时,我在尝试打开连接时遇到错误,
错误[HY000] [Informix .NET提供程序] [Informix]网络功能发生系统错误。
我假设这个错误是由于连接字符串字段未正确提供,我引用https://www.connectionstrings.com/informix/并尝试使用连接字符串,如上面链接中提到的informix with ODBC driver and informix .net provider
但没有用,我也很难理解从哪里获取每个连接字符串字段的值像protocol, port, host-name , server-name and service name.
为了找到上述字段的值,我尝试在HKEY_LOCAL_MACHINE\SOFTWARE\INFORMIX\
下的注册表项中查找SQLHOSTS密钥,遗憾的是它不在那里!并尝试从客户端sdk的bin文件夹运行setnet32.exe
,我可以看到只有protocol
信息的屏幕下方!
如果有人能帮助我,那将是非常有帮助的。
这是一个非常非常难以回答盲人的问题。 :-)
setnet32.exe将不知道您要查找的信息,您需要将此信息提供给setnet32.exe。
首先要问的问题是:您的数据库是在Unix还是Linux上运行?如果是,则通过用户“informix”登录数据库服务器并运行该命令
cat $INFORMIXDIR/etc/sqlhosts
如果您在Windows上,则登录到Windows服务器并从命令提示符运行
TYPE %INFORMIXDIR%\etc\sqlhosts
这应该为您提供一个可能包含大量信息的文件,您正在寻找不是注释且至少有4列的行。这是我正在测试的Docker上的sqlhosts文件:
$ cat $INFORMIXDIR/etc/sqlhosts
############################################################
### DO NOT MODIFY THIS COMMENT SECTION
### HOST NAME = 7edf3045c382
############################################################
informix onsoctcp 7edf3045c382 9088
informix_dr drsoctcp 7edf3045c382 9089
最后两行是文件的内容。
如果第4列是名称而您使用的是Unix或Linux,则在Unix或Linux服务器上的/ etc / services中搜索端口名称。如果你在Windows上,那么它将在%windir%\ system32 \ drivers \ etc \ services(或类似)中。
完成后,您可以运行该命令
dbaccess
选择“数据库”选项,然后选择“选择”选项。这应该为您提供一个数据库列表,大致如下:
SELECT DATABASE >>
Select a database with the Arrow Keys, or enter a name, then press Return.
------------------------------------------------ Press CTRL-W for Help --------
backbone@informix wallet@informix
cust@informix
retail@informix
sports@informix
sysadmin@informix
sysha@informix
sysmaster@informix
sysuser@informix
sysutils@informix
通常,名为“sys”的数据库是为Informix管理保留的,可能不是实际数据库,虽然您可以使用SELECT查询它们,但您可能无法(并且实际上不应该!!)INSERT,UPDATE或删除或使用DDL。
在上面的数据库列表中,所有sys *数据库都是Informix管理“数据库”。数据库名称在我的示例中以“databasename @ informixservername”格式显示。
您现在应该拥有访问数据库所需的所有信息。