Domanda

Stiamo usando un database Informix e ci stiamo collegando da .NET con successo usando ODBC. La stringa di connessione che stiamo utilizzando è;

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;

Vogliamo cambiare da ODBC e usare l'SDK e le librerie di IBM come delineato sul loro sito .

Il codice che stiamo usando è;

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 () genera l'eccezione;

ERRORE [08001] [IBM] SQL30081N È stato rilevato un errore di comunicazione. Protocollo di comunicazione utilizzato: & Quot; TCP / IP & Quot ;. API di comunicazione in uso: & Quot; SOCKETS & Quot ;. Posizione in cui è stato rilevato l'errore: & Quot; 172.22.0.0 & Quot ;. Funzione di comunicazione che rileva l'errore: & Quot; recv & Quot ;. Codici di errore specifici del protocollo: & Quot; & Quot ;, & Quot; & Quot ;, & Quot; 0 & Quot ;. SQLSTATE = 08001

" Ah ah! " tu dici. Basta inserire & Quot; PROTOCOL=onsoctcp; & Quot; Ma questo rende il IfxConnection(ConnectionString); comando un ArgumentException. Se la stringa di connessione contiene un'impostazione <field>=<value> non valida, viene generata questa eccezione. Se metto in garbage = junk; in esso genera la stessa ArgumentException che mi fa pensare che non riconosca il campo Protocol (o PRO).

(FYI) 172.22.0.0 è l'IP per devsrv01 e non termina con 0.0.

È stato utile?

Soluzione

Ho evidentemente scoperto che la risposta doveva includere;

Persist Security Info=True;Authentication=Server;

Non chiedermi perché. L'ho solo fatto funzionare.

+1 per tutti - grazie per l'aiuto.

Altri suggerimenti

Hai controllato http://www.connectionstrings.com/ ? Potrebbe offrire alcune informazioni.

Supponendo che si desideri utilizzare .NET, Informix CSDK (non quello DRDA) e ADO.NET il modo più semplice per connettersi è utilizzare aggiungere il database all'elenco di connessioni dati di Visual Studio (Visualizza - > Esplora server, quindi fai clic sul pulsante &; Connetti al database &; quindi compila il modulo (presuppone che tu abbia installato le estensioni di Visual Studio con CSDK ...)).

Quindi vai nelle proprietà del progetto, vai alla scheda delle impostazioni, aggiungi una nuova impostazione con un tipo di '(Stringa di connessione)' e per il valore inserito:

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

Quindi in app.config sarà simile a questo:

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

Assicurarsi inoltre che il database e il server siano stati configurati nel file hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts) e / o con lo strumento di connessione al database Informix 'inetd32.exe' situato nel menu Start da qualche parte ...

Inoltre, se ti senti così incline, puoi trascinare tabelle e simili dal database nella finestra Esplora server su un file XSD aperto in Visual Studio per farlo aggiungere automaticamente la stringa di connessione alla configurazione e impostare tutto per darti una digitazione set di dati e gestirà il livello CRUD per te ... (Anche se potresti avere un sacco di errori perché VS non può estrarre lo schema Informix usando i driver più recenti per qualche motivo ...)

Ad ogni modo, puoi usare la stringa di connessione come:

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

Il IBM Informix .NET Manuale Povider 4.10 utilizza Protocollo o PRO anziché PROTOCOL. Le parole chiave fanno distinzione tra maiuscole e minuscole? La notazione suggerisce che potrebbe essere, ma non ne so abbastanza su .NET per esserne sicuro. E l'errore che si ottiene quando si utilizza PROTOCOL suggerisce che potrebbe essere sensibile al maiuscolo / minuscolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top