2016-12-15 30 views
0

我想從C#.NET 4.5 VS2013訪問Netezza公司的服務器上贏7不能從C#VS2013訪問IBM Netezza的服務器,但在IBM Aginity工作臺

using System.Data.Odbc; 
    string connstring = "Driver={NetezzaSQL};Server=MyServerIP;Database=MyDBName;Uid=MyID;Pwd=myPWD;ReadOnly=true;"; 
    using (OdbcConnection conn = new OdbcConnection(connstring)) 
    { 
      conn.ConnectionTimeout = 120; 
      conn.Open(); // error 08001 
      Console.WriteLine("OK"); 
    } 

    An unhandled exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll 

    Additional information: ERROR [08001] Client unable to establish connection 

https://msdn.microsoft.com/en-us/library/ms715433%28v=vs.85%29.aspx運作良好,我看到了錯誤08001是

The driver was unable to establish a connection with the data source. 

從控制面板 - > ADM工具 - >數據源(ODBC),我檢查,我已經安裝了 NetezzaSQL 7.01.00.3553

它應該是64位,因爲Data Sources中沒有NetezzaSQL驅動程序(ODBC - 32位)。

我的C#代碼是爲任何CPU構建的。儘管我將版本更改爲64位,但我得到了同樣的錯誤。看來C#代碼找不到驅動程序?

我可以從具有相同ID和密碼的IBM Netezza Aginity工作臺訪問同一臺服務器和數據庫,沒有任何問題。

任何想法?

UPDATE

我可以在VS2013的服務器資源管理器相同的UID和PWD訪問相同的服務器和數據庫。但是,爲什麼我無法從C#代碼訪問它? 在服務器資源管理器中,我右鍵單擊連接的服務器,然後在「修改連接」窗口中,我將「使用連接字符串」複製到我的C#代碼中。 但它不起作用!

新的更新 另外,我還通過調用相同的機器上在Python 3.4.1(32和64位)「pypyodbc」的包中使用的相同的字符串,它的工作很好。

這意味着32位和64位的nsqlodbc.dll庫沒有問題。

我想問題是在C#或VS2013。

此外,在VS2013服務器資源管理器中,它只能接受32位nsqlodbc.dll並建立連接。例如,如果我只安裝了64位nsqlodbc.dll,則服務器資源管理器無法連接Netezza服務器。

+0

雖然複製連接字符串,一定要工作,也許嘗試'OdbcConnectionStringBuilder'類,並添加鑰匙呀? –

+0

此外,我見過的大多數連接字符串示例都使用'servername',而不是'server'。我知道你複製了字符串,但值得仔細檢查,這是使用的屬性名稱。 –

+0

@JeremyFortune,我試過OdbcConnectionStringBuilder,我得到了同樣的錯誤。另請參閱新的更新。 – Lily

回答

0

嘗試這個連接字符串:

Driver=NetezzaSQL; Server=MyServerIP; Port=5480; Database=MyDBName; Persist Security Info=true; UID=MyID; PWD=myPWD 
+0

不,它不起作用。我安裝了32位和64位ODBC驅動程序,並檢查了reg kys和C:\ Windows \ SysWOW64文件夾中的「odbc32.dll」和控制面板 - > adm工具 - > 64位ODBC驅動程序。他們看起來不錯。我還從「ODBC Data Spurce Adm」對話框窗口UserDNS和System DNS選項卡中測試了連接字符串,連接嘗試成功!爲什麼我無法從C#訪問它? – Lily

相關問題