Не удается подключиться в Linux к базе данных Informix с помощью Mono

#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
unknown>
: 0

и я подозреваю, что это искаженное сообщение, которое я получаю, это; как сообщается на 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