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

Posted

技术标签:

【中文标题】无法从 C# VS2013 访问 IBM Netezza 服务器,但在 IBM Aginity 工作台中运行良好【英文标题】:cannot access IBM Netezza server from C# VS2013 but worked well in IBM Aginity workbench 【发布时间】:2016-12-15 18:13:32 【问题描述】:

我正在尝试在 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# 代码中。 但是,它不起作用!

新更新 另外,我在同一台机器上通过调用 Python 3.4.1(32 位和 64 位)中的“pypyodbc”包使用了相同的字符串,效果很好。

表示32位和64位的nsqlodbc.dll lib都没有问题。

我猜问题出在 C# 或 VS2013 上。

另外,在VS2013服务器资源管理器中,它只能接受32位nsqlodbc.dll并建立连接。比如我只安装了64位的nsqlodbc.dll,服务器资源管理器也连接不上Netezza服务器。

【问题讨论】:

虽然复制连接字符串肯定可以,但也许可以试试OdbcConnectionStringBuilder 类并以这种方式添加键? 另外,我见过的大多数连接字符串示例都使用servername,而不是server。我知道你复制了字符串,但值得仔细检查一下这是使用的属性名称。 @JeremyFortune,我试过 OdbcConnectionStringBuilder ,我得到了同样的错误。另外,请查看新的更新。 【参考方案1】:

试试这个连接字符串:

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

【讨论】:

不,它不起作用。我已经安装了 32 位和 64 位 ODBC 驱动程序并检查了 reg kys 和文件夹 C:\Windows\SysWOW64 中的“odbc32.dll”和控制面板 --> adm 工具 --> 64 位的 ODBC 驱动程序。他们看起来不错。我还从“ODBC Data Spurce Adm”对话框窗口 UserDNS 和 System DNS 选项卡测试了 OP 中的连接字符串,连接尝试成功!为什么我不能从 C# 访问它?

以上是关于无法从 C# VS2013 访问 IBM Netezza 服务器,但在 IBM Aginity 工作台中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

将 C# 项目从 VS 2005 移动到 VS 2013 后出现编译器错误

VS2019 C# 连接IBM DB2数据库并查询数据表

我无法在 WPF 的现代 UI 中启用我的列表框(vs2013 C#)

VS2013创建C#控制台程序,调试错误,尝试运行项目时出错:拒绝访问

VS2013项目间共享设置文件

我无法从 C# 访问 mysql 数据库