Строка подключения для Informix для .NET
-
03-07-2019 - |
Вопрос
Мы используем базу данных Informix и успешно подключаемся к ней из .NET, используя ODBC. Строка подключения, которую мы используем:
DRIVER={IBM INFORMIX ODBC RIVER};
UID=username; PWD=password;
DATABASE=our_database;
HOST=devsrv01;
SERVER=devsrv01_tcp;
SERVICE=ids9tcp2;
PROTOCOL=onsoctcp;
CLIENT_LOCALE=en_US.CP1252;
DB_LOCALE=en_US.819;
Мы хотим перейти от ODBC и использовать SDK и библиотеки IBM в качестве изложен на их сайте .
Код, который мы используем:
string ConnectionString = "Database=our_database; Server=172.22.0.0:1528; UID=username; Password=password; ";
try
{
IfxConnection conn = new IfxConnection(ConnectionString);
conn.Open();
}
catch (IfxException ex)
{}
conn.Open () генерирует исключение;
ОШИБКА [08001] [IBM] SQL30081N Обнаружена ошибка связи. Используемый протокол связи: & Quot; TCP / IP & Quot ;. Используемый интерфейс связи: & Quot; SOCKETS & Quot ;. Место, где обнаружена ошибка: & Quot; 172.22.0.0 & Quot ;. Функция связи, обнаружившая ошибку: & Quot; recv & Quot ;. Специфичные для протокола коды ошибок: & Quot; & Quot ;, & Quot; & Quot ;, & Quot; 0 & Quot ;. SQLSTATE = 08001 р>
& "Ах, ха! &" ты говоришь. Просто вставьте & Quot; PROTOCOL=onsoctcp;
& Quot; Но это заставляет команду IfxConnection(ConnectionString);
бросать ArgumentException
. Если строка подключения содержит недопустимые настройки <field>=<value>
, она выдает это исключение. Если я положу в мусор = мусор; в нем выбрасывается то же ArgumentException, которое заставляет меня думать, что оно не распознает поле протокола (или PRO).
(FYI) 172.22.0.0 - это IP-адрес для devsrv01, который не заканчивается 0.0. Р>
Решение
Я даже точно узнал, что ответ должен был быть;
Persist Security Info=True;Authentication=Server;
Не спрашивай меня почему. Я просто заставляю это работать.
+1 для всех - спасибо за вашу помощь.
Другие советы
Проверяли ли вы http://www.connectionstrings.com/ ? Это может предложить некоторое понимание.
Предполагая, что вы хотите использовать .NET, Informix CSDK (а не DRDA) и ADO.NET, самый простой способ подключения - использовать добавление базы данных в список соединений данных Visual Studio (View - > Обозреватель серверов, затем нажмите кнопку & «Подключиться к базе данных &», а затем просто заполните форму (предполагается, что вы установили расширения Visual Studio с помощью CSDK ...)).
Затем перейдите в свойства проекта, перейдите на вкладку настроек, добавьте новый параметр с типом «(Строка подключения)» и для заданного значения:
Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
Итак, в app.config это будет выглядеть примерно так:
<add name="MyApplication.Properties.Settings.MyConnectionString"
connectionString="Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
providerName="IBM.Data.Informix" />
Также убедитесь, что база данных и сервер настроены в файле hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts) и / или с помощью инструмента подключения к базе данных Informix inetd32.exe, расположенного в меню «Пуск». где-то ...
Кроме того, если вы чувствуете склонность, вы можете перетащить таблицы и тому подобное из базы данных в окне обозревателя серверов в открытый XSD-файл в Visual Studio, чтобы он автоматически добавлял строку подключения в конфигурацию и настраивал все, чтобы вы получили типизированный набор данных, и он будет обрабатывать слой CRUD для вас ... (Хотя вы можете получить кучу ошибок, потому что VS не может получить схему Informix с использованием последних драйверов по некоторым причинам ...)
В любом случае, вы можете использовать строку подключения, например:
IfxConnection myconnection = new IfxConnection(MyApplication.Properties.Settings.Default.MyConnectionString);
IBM Informix .NET Руководство Povider 4.10 использует протокол или PRO, а не PROTOCOL. Ключевые слова чувствительны к регистру? Нотация предполагает, что это может быть, но я не знаю достаточно о .NET, чтобы быть уверенным. И ошибка, которую вы получаете, когда используете PROTOCOL, предполагает, что он может быть чувствителен к регистру.