Pregunta

Estoy usando lo siguiente:

DRIVER={Vertica ODBC Driver 4.1};
SERVER=lnxtabdb01.xxxx.com;
PORT=5433;
DATABASE=vertica;
USER=dbadmin;
PASSWORD=vertica;
OPTION=3;

Recibo este error y solo quería asegurarme de que mi cadena de conexión fuera genial antes de verificar otros posibles problemas.

error:

EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [28000] FATAL: no Vertica user name specified in startup packet

Actualización: por ahora solo estoy usando un nombre de fuente de datos del sistema en Windows Vista que puedo usar. Pero aún me gustaría saber si hay una cadena de conexión ODBC para que no tenga que configurar eso en cada máquina que se conecte a la DB de Vertica de esta manera.

Bueno, probé una cadena de conexión PostgreSQL que se ve así:

Host=lnxtabdb01.xxxx.com;
Port=5433;
Database=vertica;
User ID=dbadmin;
Password=vertica;
Pooling=true;
OPTION=3;
Min Pool Size=0;
Max Pool Size=100;
Connection Lifetime=0;

Ahora estoy obteniendo esto:

EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
¿Fue útil?

Solución

Yo tampoco he visto ninguna forma de usar ODBC sin un DSN. Aquí está mi configuración de DSN para mi estación de trabajo de Linux.

[VerticaDSN]
Description = VerticaDSN ODBC driver
Driver = /opt/vertica/lib64//libverticaodbc_unixodbc.so
Database = Retail
Servername = localhost
UserName = vertica
Password =
Port = 5433

Otros consejos

La respuesta aceptada describe una forma de conectarse con la vertical ODBC driver Usando un sistema DSN. Es posible conectarse usando solo una cadena de conexión para configurar directamente la conexión contra el controlador. El siguiente patrón de cadena de conexión se ha probado contra el Vertica ODBC Client Driver v6.1.2:

Driver=Vertica;Server=MyVerticaServer;Port=5433;Database=MyVerticaDB;UID=foo;PWD=bar

El puerto es opcional:

Driver=Vertica;Server=MyVerticaServer;Database=MyVerticaDB;UID=foo;PWD=bar

O, si está haciendo esto en .NET como soy, puede usar esto para formatear la cadena de conexión desde los parámetros necesarios:

var connectionString = string.Format(
            "Driver=Vertica;Server={0};{1}Database={2};UID={3};PWD={4}",
            server,
            port == null ? string.Empty : string.Format("Port={0};", port),
            database,
            username,
            password);

Puede conectarse a una fuente de datos Vertica ODBC sin configurar/especificar un nombre de origen de datos (DSN) utilizando una cadena de conexión que incluye lo siguiente:

  • Windows:

    Driver=Vertica ODBC Driver 4.1;Servername=nombre de host;Port=5433;Database=vertica;UserName=dbadmin;Password=sekret

  • Linux/Unix

    Driver=Vertica;Servername=nombre de host;Port=5433;Database=vertica;UserName=dbadmin;Password=sekret

Reemplazar cada cursiva valor con los apropiados para su entorno. (Nota la name=valor Pares en la cadena de conexión parecer ser sensible al caso.)

Has mirado http://www.connectionstrings.com/? No tiene específicamente un DB de Vértica en la lista, pero hay docenas de otros tipos de bases de datos que podrían ser lo suficientemente similares a Vertica que traducirán bien ...

Cuando usaba ODBC, siempre usaba Windows y configuraba un DSN. Sin embargo, mi única sugerencia, y esta sería una sugerencia general para muchos tipos diferentes de problemas en Vértica, sería probar el formato ODBC para PostgreSQL.

En su mayoría, todo lo que no está debajo del casco se basa en PostgreSQL, especialmente la sintaxis y funciones de SQL. Entonces iría al mencionado http://www.connectionstrings.com Y busque, sin embargo, PostgreSQL lo hace.

Ok, estoy buscando a través de la documentación de Vertica y no estoy viendo ninguna forma de conectarme con ODBC sin crear un DSN. JDBC parece ser un asunto diferente. Si hay una manera de hacerlo, no lo veo.

El problema parece ser (suponiendo que tenga el controlador) que el sistema no sabe que el controlador de vertical debe manejar su cadena de conexión. Un DSN ya se ha especificado, por eso funciona (mi suposición educada).

Este es el ejemplo que dan para JDBC:

"JDBC: vertical: // Server: Port/DB? User = UserName & Password = Password & SSL = True"

La cadena de conexión JDBC parece hacer que el código sepa que debería estar usando Vertica.

Permítanme publicar parte del documento pertinente (perdona el formato) con respecto a ODBC:

Parámetros DSN

Los parámetros en las siguientes tablas son comunes para todas las entradas DSN de usuario y sistema. Los ejemplos proporcionados son para clientes de Windows.

Para editar los parámetros DSN:

* UNIX and Linux users can edit the odbc.ini file. (See Creating an ODBC DSN for Linux and Solaris Clients.) The location of this file is specific to the driver manager.
* Windows users can edit the DSN parameters directly by opening the DSN entry in the Windows registry (for example, at HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\vmartdb). However, the Vertica-preferred method is to follow the steps in Creating an ODBC DSN for Windows Clients.
* Parameters can be set while making the connection using SQLDriverConnect().

  sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=VerticaSQL;BinaryDataTransfer=1",

  SQL_NTS, szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);



  Note: In the connection string ';' is a reserved symbol. If you need to set multiple parameters as part of ConnSettings parameter use '%3B' in place of ';'. Also use '+' instead of spaces.

  For Example:

  sqlRet = SQLDriverConnect(sql_hDBC, 0, (SQLCHAR*)"DSN=VerticaSQL;BinaryDataTransfer=1;ConnSettings=

  set+search_path+to+a,b,c%3 Bset+locale=ch;SSLMode=prefer", SQL_NTS,

  szDNS, 1024,&nSize, SQL_DRIVER_NOPROMPT);



* Parameters can also be set and retrieved after the connection has been made using SQLConnect(). Parameters can be set and retrieved using SQLSetConnectAttr(),SQLSetStmtAttr(), SQLGetConnectAttr() and SQLGetStmtAttr() API calls. 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top