Frage

Ich benutze Folgendes:

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

Ich erhalte diesen Fehler und wollte nur sicherstellen, dass meine Verbindungszeichenfolge cool war, bevor ich andere mögliche Probleme überprüfe.

Error:

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

UPDATE: Im Moment verwende ich nur einen Systemdatenquellennamen in Windows Vista, den ich verwenden kann. Aber ich würde immer noch gerne wissen, ob es eine ODBC -Verbindungszeichenfolge gibt, damit ich diese nicht auf jeder Maschine einrichten muss, die auf diese Weise mit der Vertica DB verbunden wird.

Nun, ich habe eine Postgresql -Verbindungszeichenfolge ausprobiert, die so aussieht:

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;

Jetzt bekomme ich das:

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

Lösung

Auch ich habe keine Möglichkeit gesehen, ODBC ohne DSN zu verwenden. Hier sind meine DSN -Einstellungen für meine Linux -Workstation.

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

Andere Tipps

Die akzeptierte Antwort beschreibt einen Weg, sich mit der Vertica zu verbinden ODBC driver mit einem System DSN. Es ist möglich, nur eine Verbindungszeichenfolge herzustellen, um die Verbindung direkt mit dem Treiber zu konfigurieren. Das folgende Verbindungszeichenfolgemuster wurde gegen die getestet Vertica ODBC Client Driver v6.1.2:

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

Port ist optional:

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

Oder wenn Sie dies in .NET wie ich tun, können Sie diese verwenden, um die Verbindungszeichenfolge aus den erforderlichen Parametern zu formatieren:

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);

Sie können eine Verbindung zu einer Vertica ODBC -Datenquelle herstellen, ohne einen Datenquellennamen (DSN) mit einer Verbindungszeichenfolge zu konfigurieren/anzugeben, die Folgendes enthält:

  • Fenster:

    Driver=Vertica ODBC Driver 4.1;Servername=Hostname;Port=5433;Database=Vertica;UserName=Dbadmin;Password=Sekret

  • Linux/Unix

    Driver=Vertica;Servername=Hostname;Port=5433;Database=Vertica;UserName=Dbadmin;Password=Sekret

Ersetzen Sie jede kursive Wert mit denen, die Ihrer Umgebung angemessen sind. (Beachten Sie das name=Wert Paare in der Verbindungszeichenfolge erscheinen Fallempfindlich sein.)

Hast Du Dir angesehen http://www.connectionstrings.com/? Es ist nicht ausdrücklich eine Vertica -DB aufgelistet, aber es ist Dutzende anderer Datenbanktypen, die möglicherweise ähnlich genug sind wie Vertica, dass sie sich gut übersetzen werden ....

Bei der Verwendung von ODBC habe ich immer Windows verwendet und ein DSN eingerichtet. Mein einziger Vorschlag, und dies wäre ein allgemeiner Vorschlag für viele verschiedene Arten von Problemen in Vertica, wäre jedoch, das ODBC -Format für PostgreSQL zu versuchen.

Meistens basiert alles, was nicht unter dem Haus ist, auf PostgreSQL, insbesondere auf SQL-Syntax und Funktionen. Also würde ich zum oben genannten gehen http://www.connectionstrings.com Und schauen Sie nach, aber PostgreSQL macht es.

OK, ich suche die Vertica -Dokumentation und sehe keine Möglichkeit, mich mit ODBC zu verbinden, ohne ein DSN zu erstellen. JDBC scheint eine andere Sache zu sein. Wenn es eine Möglichkeit gibt, es zu tun, sehe ich es nicht.

Das Problem scheint zu sein (vorausgesetzt, Sie haben den Treiber), dass das System nicht weiß, dass Ihre Verbindungszeichenfolge vom Vertica -Treiber behandelt werden sollte. Ein DSN hat das bereits angegeben, deshalb funktioniert das (meine gebildete Vermutung).

Dies ist das Beispiel, das sie für JDBC geben:

"JDBC: Vertica: // Server: Port/db? User = userername & password = password & ssl = true"

Die JDBC -Verbindungszeichenfolge scheint den Code mitzuteilen, dass er Vertica verwenden sollte.

Lassen Sie mich einen Teil des relevanten Dokuments (Verzeihen Sie die Formatierung) in Bezug auf ODBC veröffentlichen:

DSN -Parameter

Die Parameter in den folgenden Tabellen sind für alle Benutzer- und System -DSN -Einträge üblich. Beispiele für Windows -Clients.

So bearbeiten DSN -Parameter:

* 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. 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top