我试图在win 7上从C#.net 4.5 VS2013访问Netezza服务器。
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位,因为数据源中没有NetezzaSQL驱动程序(ODBC - 32位)。
我的C#代码是为任何CPU构建的。虽然我将构建更改为64位,但我得到了同样的错误。看来C#代码找不到驱动程序?
我可以使用相同的ID和密码从IBM Netezza Aginity工作台访问相同的服务器和数据库,没有任何问题。
有什么想法吗?
更新
我可以从VS2013中的服务器资源管理器访问具有相同Uid和Pwd的相同服务器和数据库。但是,为什么我无法从C#代码访问它? 在服务器资源管理器中,我右键单击连接的服务器,在“修改连接”窗口中,我将“使用连接字符串”复制到我的C#代码中。 但是,它不起作用!
NEW UPDATE 另外,我通过在同一台机器上调用Python 3.4.1(32位和64位)中的“pypyodbc”包来使用相同的字符串,它运行良好。
这意味着32位和64位的nsqlodbc.dll lib没有问题。
我猜这个问题出在C#或VS2013。
另外,在VS2013服务器资源管理器中,它只能接受32位nsqlodbc.dll并建立连接。例如,如果我只安装64位nsqlodbc.dll,则服务器资源管理器也无法连接Netezza服务器。
答案 0 :(得分:0)
尝试此连接字符串:
Driver=NetezzaSQL; Server=MyServerIP; Port=5480; Database=MyDBName; Persist Security Info=true; UID=MyID; PWD=myPWD