10

我正在使用以下内容:

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
4

6 回答 6

9

ODBC driver接受的答案描述了一种使用 System与 Vertica 连接的方法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);
于 2013-07-02T09:15:45.287 回答
5

我也没有看到任何在没有 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
于 2011-06-17T16:07:23.030 回答
2

您可以使用包含以下内容的连接字符串连接到 Vertica ODBC 数据源,而无需配置/指定数据源名称 (DSN):

  • 视窗:

    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

将每个斜体替换value为适合您环境的斜体。(注意:连接字符串中的对似乎区分大小写。)name=value

于 2012-02-07T19:12:55.880 回答
1

你看过http://www.connectionstrings.com/吗?它没有专门列出 Vertica 数据库,但有许多其他数据库类型可能与 vertica 足够相似,它们可以很好地翻译......

于 2011-04-28T13:51:39.023 回答
1

使用 ODBC 时,我总是使用 Windows 并设置 DSN。但是,我唯一的建议,也就是对于 Vertica 中许多不同类型问题的一般建议,是尝试 PostgreSQL 的 ODBC 格式。

大多数不是底层的东西都是基于 PostgreSQL,尤其是 SQL 语法和函数。所以我会去前面提到的http://www.connectionstrings.com并查看 PostgreSQL 是怎么做的。

于 2011-04-28T15:21:39.987 回答
1

好的,我正在搜索 Vertica 文档,但没有看到任何在不创建 DSN 的情况下连接 ODBC 的方法。JDBC 似乎是另一回事。如果有办法做到这一点,我没有看到它。

问题似乎是(假设您有驱动程序)系统不知道您的连接字符串应该由 Vertica 驱动程序处理。DSN 已经指定了它,所以这就是它起作用的原因(我有根据的猜测)。

这是他们为 JDBC 提供的示例:

“jdbc:vertica://server:port/db?user=username&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. 
于 2011-04-28T18:08:43.307 回答