无法从C#VS2013访问IBM Netezza服务器,但在IBM Aginity工作台中运行良好

时间:2016-12-15 18:13:32

标签: c# odbc netezza

我试图在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服务器。

1 个答案:

答案 0 :(得分:0)

尝试此连接字符串:

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