2014-03-31 55 views
0

我想從Ubuntu(kubuntu 13.04)與nodejs連接到一個SQL服務器數據庫! (SQL服務器2012) 我看着節點ODBC .. 所以......我開始安裝freetds的,然後unixODBC的,然後啓動:NPM安裝ODBC從Linux的Nodejs和Sql服務器

1)我配置文件「等/ freetds的/ freetds.conf 「是這樣的:

[FreeTDS] 
host = gerry_win7 
port = 1433 
tds_version = 8.0 
client charset = UTF-8 

2)安裝SQSH(命令和apt-get安裝SQSH),並嘗試以

sqsh -S FreeTDS -U trm1 -P user 

連接並執行一個查詢:完美的作品!

3)然後,我試圖以該方法配置ODBC訪問: 文件 「/etc/odbcinst.ini」:

[FreeTDS] 
Description = TDS driver 
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so 
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so 
CPTimeout = 
CPReuse = 
FileUsage = 1 

文件 「/etc/odbc.ini」:

[FreeTDS] 
Driver = FreeTDS 
Description = ODBC connectin via FreeTDS 
Trace = No 
Servername = gerry_win7 
Database = testsql 
UID = trm1 
PWD = user 
Port = 1433 

4)與此的NodeJS示例代碼我收到以下錯誤: 代碼:

var cn = 'DRIVER={FreeTDS};SERVER=gerry_win7;UID=trm1;PWD=user;DATABASE=testsql'; 
var Database = require('odbc').Database, db = new Database(); 
db.open(cn, function(err){ 
    if (err) {return console.log(err);} 
}); 

錯誤:

[unixODBC][FreeTDS][SQL Server]Unable to connect to data source 
[Error: Error opening database] 

,但正如我寫之前,用「SQSH」客戶端的連接的工作原理:我可以運行查詢! 有人能幫我理解我在做什麼錯嗎?

+0

最有可能不是這個問題,但不應該'tds_version'與'tds版本'的空間? –

+0

您可能還想在連接字符串中嘗試使用「SERVERNAME」而不是「SERVER」。 –

+0

對不起..「tds版本」..我寫錯了,但在配置文件是正確的..我試圖寫SERVERNAME但錯誤是一樣的.. – girtri

回答

0

這是連接字符串,如果我被指定在它的驅動程序,我會用:

"DRIVER={FreeTDS};SERVERNAME=gerry_win7;DATABASE=testsql;UID=trm1;PWD=user;AutoTranslate=yes" 

如果你想使用在/etc/odbc.ini已經配置了DSN,那麼你會想這樣做:

"DSN=FreeTDS;UID=trm1;PWD=user;DATABASE=testsql" 

使用sqsh命令進行測試可能只是使用/etc/freetds/freetds.conf(需要引用)中的配置信息。最好是與像isql命令測試(外節點)ODBC配置:

$ isql FreeTDS trm1 user 

凡freetds的是/etc/odbc.ini配置的DSN。

您的配置可能有點混亂,因爲驅動程序名稱和DSN名稱都是FreeTDS。我個人發現使用服務器名稱或其他標識符作爲/etc/odbc.ini中指定的DSN名稱更有幫助。我建議這樣的事情在你的odbc.ini:

[gerry] 
Driver = FreeTDS 
Description = ODBC connectin via FreeTDS 
Trace = No 
Servername = gerry_win7 
Database = testsql 
UID = trm1 
PWD = user 
Port = 1433 

然後使用這個連接字符串:

"DSN=gerry;UID=trm1;PWD=user;DATABASE=testsql" 

做這樣的說法,你可能只需要改變在odbc.ini驅動程序入口文件如果你想使用SQL Server Native Client 11.0,如果你到了那一步。:)

+0

非常感謝你!! .. 。只是一件事:在odbc.ini配置參數不是「服務器名」,但「服務器」(與服務器名不起作用,我看到..我發現一個錯誤的例子).. – girtri

+0

很高興爲你工作。有趣的「服務器名稱」參數。這就是我在我的odbc.ini中使用,它的工作原理。只要你有你的工作,這就是最重要的。 :) – wankdanker