无法从 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 后出现编译器错误
我无法在 WPF 的现代 UI 中启用我的列表框(vs2013 C#)