为什么 .NET 不能通过已安装的 {NetezzaSQL} 驱动程序连接到我的 Netezza 机器?64 位应用程序也无法通过此 ODBC 连接进行连接。为什么会这样?我已经在控制面板中建立了用户和系统 Netezza ODBC 连接,当我单击“测试连接”时两者都可以正常工作?我在注册表中看到了值,但是当我遍历注册表驱动程序时,.NET 看不到“NetezzaSQL”。根据 Netezza 的说法,他们没有 64 位 ODBC 驱动程序。他们提供的驱动程序应该适用于 32 位和 64 位应用程序。这可能是 Windows 7 的权限问题吗?
static void CreateNetezzaTableObjectFolders()
{
//string activeDir = @"C:\Source\EDW\dw-objects\trunk";
OdbcConnection conn = new OdbcConnection();
conn.ConnectionString = "Driver={NetezzaSQL};servername=10.1.170.18;port=5480;database=DEV_SANDBOX; username=mac;password=secret;";
OdbcDataReader rdr = null;
try
{
conn.Open();
System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand("SELECT OBJECT_NAME FROM QA_ETL..STG_OBJECTS", conn);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
// Create Folder
//string objectName = rdr[0].ToString();
//string newPath = System.IO.Path.Combine(activeDir, objectName);
//System.IO.Directory.CreateDirectory(newPath);
}
}
finally
{
// close the reader
if (rdr != null)
{
rdr.Close();
}
// close the connection
if (conn != null)
{
conn.Close();
}
}
}
在新选项卡中打开以查看 ODBC 的注册表设置并放大:
==============================
2012 年 7 月 13 日下午 4:56 更新:
显然,驱动程序名称位于大括号内。当我以编程方式获取驱动程序列表时,我看不到驱动程序。如何在 Windows 用户界面中添加到此列表?但是,我确实在控制面板 > 管理工具 > ODBC 驱动程序下查看已安装的 Netezza 驱动程序。
这是一些验证我正在解释的代码:
public static void GetSystemDriverList()
{
//List<string> names = new List<string>();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBCINST.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Drivers");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
Console.WriteLine(sName);
//names.Add(sName);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
Console.ReadLine();
}
这是我在使用用户 ODBC 连接时从 Windows 7 框中的 Microsoft Access 2007 得到的连接错误。系统一不可见。
错误:“ODBC--调用失败。[Microsoft][ODBC Driver Manager] 指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配 (#0)”