Pregunta

Estamos utilizando una base de datos Informix y nos estamos conectando desde .NET con éxito utilizando ODBC. La cadena de conexión que estamos usando es;

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;

Queremos cambiar de ODBC y utilizar el SDK y las bibliotecas de IBM como descrito en su sitio .

El código que estamos usando es;

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)
{}

El conn.Open () lanza la excepción;

ERROR [08001] [IBM] SQL30081N Se ha detectado un error de comunicación. Protocolo de comunicación que se utiliza: & Quot; TCP / IP & Quot ;. Se está utilizando la API de comunicación: & Quot; SOCKETS & Quot ;. Ubicación donde se detectó el error: & Quot; 172.22.0.0 & Quot ;. Función de comunicación que detecta el error: & Quot; recv & Quot ;. Códigos de error específicos del protocolo: & Quot; & Quot ;, & Quot; & Quot ;, & Quot; 0 & Quot ;. SQLSTATE = 08001

" ¡Ah, ja! " tu dices. Simplemente ingrese & Quot; PROTOCOL=onsoctcp; & Quot; Pero esto hace que el comando IfxConnection(ConnectionString); arroje un ArgumentException. Si la cadena de conexión contiene una configuración <field>=<value> no válida, arroja esta excepción. Si pongo en basura = basura; en él arroja la misma excepción ArgumentException que me hace pensar que no reconoce el campo Protocolo (o PRO).

(FYI) 172.22.0.0 es la IP para devsrv01 y no termina 0.0.

¿Fue útil?

Solución

Siempre descubrí que la respuesta era incluir;

Persist Security Info=True;Authentication=Server;

No me preguntes por qué. Simplemente lo hago funcionar.

+1 para todos: gracias por su ayuda.

Otros consejos

¿Comprobó http://www.connectionstrings.com/ ? Podría ofrecer una idea.

Suponiendo que desea usar .NET, Informix CSDK (no DRDA) y ADO.NET, la forma más fácil de conectarse es agregar la base de datos a la lista de Conexiones de datos de Visual Studio (Ver - > Server Explorer, luego haga clic en el botón " Connect to Database ", luego complete el formulario (Esto supone que instaló las Extensiones de Visual Studio con el CSDK ...)).

Luego vaya a las propiedades del proyecto, vaya a la pestaña de configuración, agregue una nueva configuración con un tipo de '(Cadena de conexión)' y para el valor puesto:

 Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"

Entonces, en app.config se verá así:

 <add name="MyApplication.Properties.Settings.MyConnectionString"
  connectionString="Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
  providerName="IBM.Data.Informix" />

Asegúrese también de que la base de datos y el servidor se hayan configurado en el archivo de hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts) y / o con la herramienta de conexión de base de datos Informix 'inetd32.exe' ubicada en el menú Inicio en algún lugar ...

Además, si se siente inclinado, puede arrastrar las tablas y cosas así desde la base de datos en la ventana del Explorador del servidor a un archivo XSD abierto en Visual Studio para que agregue automáticamente la cadena de conexión a la configuración y configure todo para darle un mecanografiado conjunto de datos y manejará la capa CRUD por usted ... (aunque podría obtener un montón de errores porque VS no puede extraer el esquema Informix utilizando los controladores más recientes por alguna razón ...)

De todos modos, puede usar la cadena de conexión como:

IfxConnection myconnection = new IfxConnection(MyApplication.Properties.Settings.Default.MyConnectionString);

El IBM Informix .NET Povider Guide 4.10 manual utiliza Protocol o PRO en lugar de PROTOCOL. ¿Las palabras clave distinguen entre mayúsculas y minúsculas? La notación sugiere que podría ser, pero no sé lo suficiente sobre .NET para estar seguro. Y el error que aparece cuando usa PROTOCOLO sugiere que puede ser sensible a mayúsculas y minúsculas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top