我正在尝试使用odbc在node.js中连接到monetDB。但是,我一直收到以下错误:
The driver reported the following diagnostics whilst running SQLDriverConnect
IM002:1:0:[unixODBC][Driver Manager]Data source name not found, and no default driver specified
DEBUG: []源代码如下:
var sys = require("util");
var odbc = require("/home/vash/node_modules/odbc/odbc.js");
var db = new odbc.Database();
db.open("Driver={ODBC for MonetDB};Setup=/usr/lib/libMonetODBCs.so;UsageCount= 1;SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo", function(err)
{
db.query("select * from demo", function(err, rows, moreResultSets)
{
sys.debug(sys.inspect(rows));
db.close(function(){});
});
});使用命令"isql -v monetdb",我可以使用包含以下odbc.ini和odbcinst.ini内容的ODBC连接到monetDB:
[monetdb]
Description = "ODBC for MonetDB"
Driver = /usr/lib/libMonetODBC.so
Setup = /usr/lib/libMonetODBCs.so
UsageCount = 1
SERVER = vash-G75VW
USER = monetdb
PASSWORD = monetdb
PORT = 5000
DATABASE = demo因为我使用isql连接,所以我猜问题出在代码行上:
"Driver={ODBC for MonetDB};Setup=/usr/lib/libMonetODBCs.so;UsageCount= 1;SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo"您知道出了什么问题吗?我是否正确设置了上面的连接字符串?
发布于 2012-07-13 16:20:19
第一件事是你混淆了你的odbc.ini和odbcinst.ini设置(尽管你在一定程度上逃脱了惩罚)。odbcinist.ini文件包含驱动程序列表,其中每个驱动程序在[]中命名,后面是驱动程序属性。因此,如果您的odbcinst.ini文件的内容如上所示,那么您已经命名了一个名为"monetdb“的驱动程序,该驱动程序具有各种属性。驱动程序唯一绝对需要的属性是driver属性,它应该指向驱动程序的共享对象。附加属性usagecount、description和setup是可选的。描述可以从一些ODBC API返回,设置库告诉驱动程序管理器在需要时加载哪个设置库(在unix上很少这样做)(例如,如果驱动程序想要提示输入密码,或者您没有给它足够的连接属性)。所以你的odbcinst.ini文件应该看起来像这样(注意,我特意重命名了你的驱动程序密钥,以使事情变得清晰):
[monetdb_driver]
Description = "ODBC Driver for MonetDB"
Driver = /usr/lib/libMonetODBC.so
Setup = /usr/lib/libMonetODBCs.so
UsageCount = 1/etc/odbc.ini文件包含系统DSN,其创建方式与odbcinst.ini文件类似,不同之处在于[]中的每个条目都是DSN名称。DSN绝对需要的唯一属性是Driver属性,因为它命名了要用于此DSN的ODBC驱动程序。名为的驱动程序应该是odbcinst.ini文件中的关键字,因此您的odbc.ini文件应该如下所示(但请记住,我将您的驱动程序重命名为:
[monetdb]
Description = "DSN for MonetDB"
Driver = monetdb_driver
SERVER = vash-G75VW
USER = monetdb
PASSWORD = monetdb
PORT = 5000
DATABASE = demo请记住,您可以将用户-j设置为,它们通常放在~/.odbc.ini中(请参阅下面的odbcinst的输出)。
您会发现unixODBC的odbcinst命令也很有用,因为您可以运行它来检查您的ini文件应该在哪里:
$odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/martin/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2一旦你这样做了,你的isql命令(和前面一样)应该可以工作了-类似于:
isql -v monetdb your_username your_password
现在是给SQLDriverConnect打电话的时候了。
db.open("Driver={monetdb_driver};SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo",我不使用monetdb,所以我不能确定除了"Driver“属性之外的其他属性,但ODBC通常使用UID和PWD属性作为用户名和密码。我相信monetdb有一个端口和数据库属性。
您可以从我编写的Linux/UNIX ODBC和ODBC - The Connection Process中找到更多关于unix上的ODBC以及连接过程是由谁工作的更多信息。
如果您只打算使用无DSN的连接字符串(上面是您对SQLDriverConnect的调用)进行连接,则现在可以删除odbc.ini文件的内容。
https://stackoverflow.com/questions/11444703
复制相似问题