1

インストールされている {NetezzaSQL} ドライバーを介して .NET が Netezza ボックスに接続できないのはなぜですか? 64 ビット アプリケーションも、この ODBC 接続を介して接続できません。なぜでしょうか?コントロール パネルでユーザーとシステムの両方の Netezza ODBC 接続を構築しましたが、[接続のテスト] をクリックすると両方とも正常に動作しますか? レジストリに値が表示されますが、レジストリ ドライバをトラバースすると、.NET で「Ne​​tezzaSQL」が表示されません。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 から取得した接続エラーです。システム 1 は表示されませんでした。

エラー: 「ODBC -- 呼び出しに失敗しました。[Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーション (#0) の間のアーキテクチャの不一致が含まれています」

ここに画像の説明を入力

4

1 に答える 1

5

Microsoft は「system32」フォルダの名前を変更していないため、system32 には実際にはすべての 64 ビット ドライバがあります。また、SysWow64 フォルダーには 32 ビット ドライバーがすべて含まれています。デフォルトでは、Visual Studio 2010 で作成された .NET プロジェクトの「ターゲット プラットフォーム」は x86 です。x64 に変更したところ、64 ビットの NetezzaSQL ドライバーが .NET で動作するように接続が機能しました。

C:\Windows\system32\ フォルダー (これは 64 ビット バージョンのダイアログです64 ビット ドライバーをビルドする)、または C:\Windows\SysWow64\ フォルダー (これは、32 ビット ドライバーをビルドするためのダイアログの 32 ビット/x86 バージョンです)。はい、マイクロソフトはそのように奇妙であるため、フォルダーは逆になっています。

さらに、ビルドされるレジストリには 2 つの異なるフォルダーがあります。上記のリスト (私の黒いスクリーン ショット) は、Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ リストからのものであることがわかります。これらは 32 ビット ドライバーだからです。私がインストールしたdll「nzodbcsetup.exe」は、明らかに64ビットドライバーとしてインストールされました。これを 64 ビット Windows に 32 ビット ドライバーとしてインストールする方法がよくわからないため、.NET プロジェクトの「ターゲット プラットフォーム」をデフォルトの x86 から x64 に変更しました。これを 32 ビット Windows XP ボックスにインストールすると、ドライバは正常に動作したため、32 ビット ドライバとしてもインストールする方法が必要です。

奇妙なのは、Netezza の OLE ドライバーが分離されていることです。32 ビットと 64 ビットの dll exe ファイル (バージョン 6.0.3 用) があります。"nzledbsetup.exe" (~82MB x86) および "nzledbsetup64.exe" (~102MB x64)。しかし、ODBC には 1 つしかなく、明らかに両方です。SysWOW6432Node (run > regedit の下) で 32 ビット ドライバーを手動でビルドしようとしましたが、ドライバー ファイルとセットアップ ファイル (system32 フォルダー内) を指定しましたが、エラーが発生しました。 64ビットではなく32ビットです。

于 2012-07-16T19:54:56.753 に答える