我正在尝试使用Mono访问Informix(IDS 11.7)数据库 在Linux上(Centos 5.4)
我可以使用下面的小程序访问mysql数据库,没有任何问题。 我可以“isql unicare”没有问题,所以看起来unixODBC还可以。
这些是我的odbc.ini和odbcinst.ini文件(使用Adam Williams提供的建议 来自http://www.unixodbc.org/doc/informix.html)
的Nick Gorham[MyDSN]
DRIVER=/usr/lib/libmyodbc3.so
SERVER=localhost
DATABASE=unicare
UID=root
PWD=MyWord
PORT=
[unicare]
Driver=Informix
Server=unicare
Database=unicare
CLIENT_LOCALE=en_us.8859-1
DB_LOCALE=en_us.8859-1
TRANSLATIONDLL=/u/Informix11_7/lib/esql/igo4a304.so
##-Example driver definitinions
##-Included in the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
# Driver from the MyODBC package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
[Informix]
Description=Informix IDS 11.7
Driver=/u/Informix11_7/lib/cli/libifcli.so
##Driver=/u/Informix11_7/lib/cli/iclit09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.51
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y
以下是http://mono-project.com/ODBC上的示例程序, 我在MySQL数据库上成功使用原始版本,然后 更改为与Informix数据库的DSN匹配。
同样,“isql unicare”工作并读取Informix数据库的employee表。 如果脚本看起来很讨厌,请道歉,但我在这里与编辑斗争!
using System;
using System.Data;
using System.Data.Odbc;
public class Test
{
public static void Main(string[] args)
{
// have an ODBC DSN setup named MYSQLDSN
// that accesses a MySQL database via
// MyODBC driver for ODBC with a
// hostname of localhost and database test
string connectionString =
"DSN=unicare;" +
"UID=bob;" +
"PWD=BobWord";
IDbConnection dbcon;
dbcon = new OdbcConnection(connectionString);
dbcon.Open();
IDbCommand dbcmd = dbcon.CreateCommand();
// requires a table to be created named employee
// with columns firstname and lastname
// such as,
// CREATE TABLE employee (
// firstname varchar(32),
// lastname varchar(32));
string sql =
"SELECT firstname, lastname " +
"FROM employee";
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()) {
string FirstName = (string) reader["firstname"];
string LastName = (string) reader["lastname"];
Console.WriteLine("Name: " +
FirstName + " " + LastName);
}
// clean up
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
}
}
但是当我运行它时,我得到......
$ mono TestExample.exe
Unhandled Exception: System.Data.Odbc.OdbcException: ERROR [I
我应该使用Informix中的odbc.ini和odbcinst.ini(已编辑)吗?
如果我使用更常规的odbc * ini设置,那么我会变得更加冗长 错误消息未处理的异常:System.Data.Odbc.OdbcException: 错误[IM002] [unixODBC] [驱动程序管理器]未找到数据源名称, 并且未指定默认驱动程序 在
<filename unknown>
中的System.Data.Odbc.OdbcConnection.Open()[0x00000]:0
我怀疑这个乱码的消息是我得到的; 据报道 http://article.gmane.org/gmane.comp.gnome.mono.general/35093
非常感谢任何想法或帮助。
答案 0 :(得分:1)
您需要将odbc.ini
中的“驱动程序”指向共享库文件,就像“MyDSN”条目一样。这就是我使用的 - 它完美无缺:
[tsdemo]
Driver=/opt/IBM/informix/lib/cli/iclit09b.so
Description=IBM INFORMIX ODBC DRIVER
Database=tsdemo
LogonID=informix
pwd=inf123
Servername=storm_tcp