Pergunta

Estamos usando um banco de dados do Informix e estamos nos conectando a ele do .NET com sucesso usando ODBC. A string de conexão que estamos usando é;

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 mudar do ODBC e usar o SDK e as bibliotecas da IBM como descrito em seu site.

O código que estamos 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)
{}

O Conn.open () lança a exceção;

Erro [08001] [IBM] SQL30081N Um erro de comunicação foi detectado. Protocolo de comunicação sendo usado: "TCP/IP". API de comunicação sendo usada: "soquetes". Localização onde o erro foi detectado: "172.22.0.0". Função de comunicação detectando o erro: "RECV". Códigos de erro específicos do protocolo: "", ""," 0 ". Sqlstate = 08001

"Ah ha!" você diz. Apenas coloque "PROTOCOL=onsoctcp;"Mas isso faz o IfxConnection(ConnectionString); Comando Throw An ArgumentException. Se a string de conexão contiver algum inválido <field>=<value> Definir ele lança esta exceção. Se eu colocar lixo = lixo; Nele, lança a mesma argumentação que me faz pensar que não reconhece o campo Protocolo (ou Pro).

(FYI) 172.22.0.0 é o IP do devSRV01 e não termina 0.0.

Foi útil?

Solução

Eventualmente descobri que a resposta era incluir;

Persist Security Info=True;Authentication=Server;

Não me pergunte o porquê. Eu só faço funcionar.

+1 para todos - obrigado pela sua ajuda.

Outras dicas

Você checou http://www.connectionstrings.com/ ? Pode oferecer alguma visão.

Supondo que você queira usar o .NET, o Informix CSDK (não o DRDA) e o ADO.NET A maneira mais fácil de se conectar é usar Adicione o banco de dados à lista de conexões de dados do Visual Studio (View -> Server Explorer, depois clique em O botão "Conectar ao banco de dados" e, em seguida, preencha o formulário (isso pressupõe que você instalou as extensões do Visual Studio com o CSDK ...)).

Em seguida, vá para as propriedades do projeto, vá para a guia Configuração, adicione uma nova configuração com um tipo de '(string de conexão)' e para o valor put:

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

Então, no app.config, será algo assim:

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

Verifique também se o banco de dados e o servidor foram configurados no arquivo hosts (c: windows system32 drivers etc hosts) e/ou com a ferramenta de conexão do banco de dados do Informix 'inetd32.exe' localizada no menu Iniciar em algum lugar .. .

Além disso, se você se sentir inclinado, pode arrastar tabelas e tal do banco de dados na janela do servidor Explorer para um arquivo XSD aberto no Visual Studio para que ele adicione automaticamente a string de conexão à configuração e configure tudo para fornecer um conjunto de dados digitado e ele Will lidou com a camada CRUD para você ... (embora você possa obter um monte de erros porque o VS não pode puxar o esquema do Informix usando os drivers mais recentes por algum motivo ...)

Enfim, você pode usar a string de conexão como:

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

o IBM Informix .NET PoVider Guide 4.10 O manual usa protocolo ou Pro em vez de protocolo. As palavras-chave são sensíveis ao caso? A notação sugere que pode ser, mas não sei o suficiente sobre o .NET para ter certeza. E o erro que você recebe quando usa o protocolo sugere que ele pode ser sensível ao minúsculas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top