从C#阅读Netezza的数据库表通过ODBC不能在Windows 7工作(Reading Nete

2019-06-26 06:33发布

为什么不能.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注册表设置和放大:

============================

7/13/2012下午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();
}    

这里是连接错误,我从Microsoft Access 2007年从Windows 7箱送,当我使用的用户ODBC连接。 该系统中的一个是不可见的。

错误:“ODBC - 调用失败[微软] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的结构不匹配(#0)”

Answer 1:

微软从未更名为他们的“SYSTEM32”文件夹,所以SYSTEM32真的有所有的64个驱动程序。 而SYSWOW64文件夹中有所有的32个驱动程序。 默认情况下,在Visual Studio 2010中创建一个.NET项目将有86的“目标平台”。 我只是改变了它的x64和我联系的工作,让我的64位NetezzaSQL驱动程序.NET工作。

只要知道你可以在C或者运行“odbcad32.exe的”文件启动控制面板下的ODBC(数据源)对话框>管理工具:\ WINDOWS \ SYSTEM32 \文件夹(这是对话的64位版本生成64个驱动器),或在C:\的Windows \ SYSWOW64 \文件夹(这是32位/ 86版本的对话的建立32个的驱动程序)。 是的,文件夹是相反的,因为微软是怪异的方式。

此外,还有在建得到注册表中的两个不同的文件夹。 原来,上面的列表(在我黑色的屏幕截图)来自电脑\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ODBC \列表,因为这些都是32个驱动程序。 我安装,“nzodbcsetup.exe”的dll,显然是安装为64位驱动程序。 我不完全知道如何安装这个在64和Windows中的32位驱动程序,所以这就是为什么我在.NET项目一改“目标平台”从默认的86至64位。 必须有安装它作为一个32位驱动程序,以及因为当我将它安装在一个32位的Windows XP中,驾驶员工作得很好的方式。

什么奇怪的是,Netezza的OLE驱动程序是分开的。 他们有一个32位和64位的DLL exe文件(对于6.0.3版本)。 “nzoledbsetup.exe”(〜82MB x86)的和 “nzoledbsetup64.exe”(〜102MB的x64)。 但是,ODBC只是有一个,这显然是两者兼而有之。 我试过手动在SysWOW6432Node建设一个32位驱动程序(下运行>注册表编辑器),并指出驱动程序文件和设置文件(在system32文件夹,但我得到了一个错误,请评论有没有在Windows的方式来自动安装为32位,而不是64。



文章来源: Reading Netezza database table from C# via ODBC not working in Windows 7