题
我正在使用以下内容:
DRIVER={Vertica ODBC Driver 4.1};
SERVER=lnxtabdb01.xxxx.com;
PORT=5433;
DATABASE=vertica;
USER=dbadmin;
PASSWORD=vertica;
OPTION=3;
我遇到了这个错误,我只是想确保在检查其他可能的问题之前,我的连接字符串很酷。
错误:
EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [28000] FATAL: no Vertica user name specified in startup packet
更新:现在,我只是在Windows Vista中使用的系统数据源名称,我可以使用。但是我仍然想知道是否有ODBC连接字符串,这样我就不必在每台将以这种方式连接到Vertica DB的机器上进行设置。
好吧,我尝试了一个看起来像这样的PostgreSQL连接字符串:
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;
现在我明白了:
EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
解决方案
我也没有看到没有DSN使用ODBC的任何方法。这是我的Linux工作站的DSN设置。
[VerticaDSN]
Description = VerticaDSN ODBC driver
Driver = /opt/vertica/lib64//libverticaodbc_unixodbc.so
Database = Retail
Servername = localhost
UserName = vertica
Password =
Port = 5433
其他提示
接受的答案描述了一种与Vertica连接的方法 ODBC driver
使用系统 DSN
. 。只需使用连接字符串即可直接与驱动程序配置连接。以下连接字符串模式已针对 Vertica ODBC Client Driver v6.1.2
:
Driver=Vertica;Server=MyVerticaServer;Port=5433;Database=MyVerticaDB;UID=foo;PWD=bar
端口是可选的:
Driver=Vertica;Server=MyVerticaServer;Database=MyVerticaDB;UID=foo;PWD=bar
或者,如果您像我一样在.NET中执行此操作,则可以使用它从必要的参数中格式化连接字符串:
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);
您可以使用包含以下内容的连接字符串来连接/指定数据源名称(DSN),而无需配置/指定数据源名称(DSN)即可连接到Vertica ODBC数据源:
视窗:
Driver=Vertica ODBC Driver 4.1;Servername=主机名;Port=5433;Database=Vertica;UserName=dbadmin;Password=Sekret
Linux/Unix
Driver=Vertica;Servername=主机名;Port=5433;Database=Vertica;UserName=dbadmin;Password=Sekret
更换每个斜体化 价值
与适合您的环境的人。 (注意: name=价值
连接字符串中的对 似乎 对病例敏感。)
你看过吗 http://www.connectionstrings.com/?它没有具体列出的Vertica DB,但是其他数十种数据库类型可能与Vertica相似,它们可以很好地翻译。
使用ODBC时,我总是在使用Windows并设置DSN。但是,我唯一的建议,这将是Vertica中许多不同类型的问题的一般建议,就是为PostgreSQL尝试ODBC格式。
大多数情况下,所有不是下层的东西都是基于PostgreSQL,尤其是SQL语法和函数。所以我会去上述 http://www.connectionstrings.com 然后查找,但是PostgreSQL做到了。
好的,我正在搜索Vertica文档,但我没有看到与ODBC连接的任何方法,而无需创建DSN。 JDBC似乎是另一回事。如果有办法做到这一点,我就不会看到它。
问题似乎是(假设您有驱动程序),该系统不知道您的连接字符串应由Vertica驱动程序处理。 DSN已经指定了它,所以这就是为什么它有效的原因(我受过教育的猜测)。
这是他们为JDBC提供的示例:
“ jdbc:vertica:// server:port/db?user =用户名&password = password&ssl = true”
JDBC连接字符串似乎让代码知道应该使用Vertica。
让我发布有关ODBC的相关文件(原谅格式)的一部分:
DSN参数
以下表中的参数对于所有用户和系统DSN条目都是常见的。提供的示例是针对Windows客户端的。
编辑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.