C# 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています。の対処方法

.Net Framework 3.5 で開発したアプリケーションを Windows 10 64 bit で
実行し、ODBC(32bit)でデータベースアクセスしようとしたときに発生しました。

原因としては、アプリケーションの実行が64bitであるにも関わらず、
ODBCが32bitのため、このエラーメッセージが発生しました。

・アプリケーション:64bit
・OS:64bit
・ODBCドライバ:32bit

こんな状態です。アプリケーションとODBCドライバのアーキテクチャ(bit数)を
一緒にする必要があるようです。

対策は、32bitアプリケーションとして実行するように、ビルドオプションを変更しました。

プラットフォームターゲットが
・Any CPU の場合、OSのアーキテクチャによって32bitや64bitに変更されます。
・x86 の場合、OSのアーキテクチャによらず、32bitで実行されます。
・x64 の場合、OSのアーキテクチャによらず、64bitで実行されます。

ちなみに、実行時のbit数が32bitか64bitかを取得するソースを紹介します。

    /// <summary>
    /// 実行時のアーキテクチャが32Bitか64Bitかを判断する
    /// </summary>
    /// <param name="processBit"></param>
    /// <returns></returns>
    public static int GetRunningArch(out string processBit)
    {
        processBit = "";

        try
        {
            if (IntPtr.Size == 4) processBit = "32bit";
            else processBit = "64bit";

            return UEReturnCode.Normal;
        }
        catch
        {
            return UEReturnCode.Error;
        }

    }
    

返信を残す

メールアドレスが公開されることはありません。