String de conexão para informação para .NET
-
03-07-2019 - |
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.
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.