我想從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服務器。
雖然複製連接字符串,一定要工作,也許嘗試'OdbcConnectionStringBuilder'類,並添加鑰匙呀? –
此外,我見過的大多數連接字符串示例都使用'servername',而不是'server'。我知道你複製了字符串,但值得仔細檢查,這是使用的屬性名稱。 –
@JeremyFortune,我試過OdbcConnectionStringBuilder,我得到了同樣的錯誤。另請參閱新的更新。 – Lily