#odbc #informix
#odbc #informix
Вопрос:
Я пытаюсь использовать Mono для доступа к базе данных Informix (IDS 11.7) в Linux (Centos 5.4)
Я могу получить доступ к базе данных mysql с помощью небольшой программы, приведенной ниже, без проблем. Я могу «isql unicare» без проблем, так что, похоже, unixODBC в порядке.
Это мои файлы odbc.ini и odbcinst.ini (с использованием предложений, предоставленных Адамом Уильямсом
Нику Горэму, найденных по адресу http://www.unixodbc.org/doc/informix.html )
/etc/odbc.ini
[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
/etc/odbcinst.ini
##-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, а затем
изменено на это, чтобы соответствовать DSN базы данных Informix.
Опять же, «isql unicare» работает и считывает таблицу employee базы данных Informix. Прошу прощения, если скрипт выглядит отвратительно, но я сражаюсь с редактором здесь!
testExample.cs
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
Должен ли я использовать odbc.ini и odbcinst.ini (отредактированные) из Informix?
Если я использую более обычный набор odbc * ini, то я получаю более подробное сообщение об ошибке Необработанное исключение: System.Data.Odbc.OdbcException: ОШИБКА [IM002] [unixODBC] [Диспетчер драйверов] Имя источника данных не найдено, и драйвер по умолчанию не указан в System.Data.Odbc.OdbcConnection.Открыть () [0x00000] в
<filename
: 0
unknown>
и я подозреваю, что это искаженное сообщение, которое я получаю, это; как сообщается на http://article.gmane.org/gmane.comp.gnome.mono.general/35093
Будем признательны за любые идеи или помощь.
Ответ №1:
Вам нужно указать ‘Driver’ в 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