AnsweredAssumed Answered

FileMaker ODBC Client Driver 64bit版の不具合

Question asked by ranja on Sep 5, 2013
Latest reply on Dec 4, 2013 by ranja

概要

FileMaker ODBC Client Driver 64bit版の不具合

製品

FileMaker Server

バージョン

Advanced 12

オペレーティングシステムのバージョン

Windows 2008R2

問題の内容

WindowsのC# (.NET Framework 4.0/4.5)からFileMaker ODBC Client Driverを使用してFileMaker Server Advancedのデータベースにアクセスした場合、SQLの実行結果の列情報を取得しようとすると、クライアントが64ビット環境の場合だけエラーが発生します。

問題の再現方法

具体的には、ASP.NETのWebFormのハンドラで次のようなコードを書いたとします。ここでTestODBCはファイルおよびテーブルの名前、MyServerはFileMaker Serverをホストしているマシン名です。Field1のフィールドタイプは数値です。


     protected void Page_Load(object sender, EventArgs e)
     {
          using (var conn = new System.Data.Odbc.OdbcConnection("DRIVER={FileMaker ODBC};Database=TestODBC;Server=MyServer;uid=admin;pwd="))
          {
               conn.Open();
               using (var cmd = conn.CreateCommand())
               {
                    cmd.CommandText = "SELECT Field1 FROM TestODBC";
                    using (var reader = cmd.ExecuteReader())
                    {
                         while (reader.Read())
                         {
                              var v = reader.GetDouble(0);//OK
                              var n = reader.GetName(0);//64bit環境だとエラー
                              System.Diagnostics.Debug.WriteLine(string.Format("{0}: {1}", n, v));
                         }
                    }
               }
          }
     }

reader.GetDouble(0)で、値を取得するところは問題ないのですが、列名を取得するreader.GetName(0)を呼び出したところで次のようなOdbcExceptionが発生します。エラーの具体的な内容を示す説明文はありません。
[OdbcException (0x80131937)]
   System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) +40
   System.Data.Odbc.OdbcDataReader.GetColAttributeStr(Int32 i, SQL_DESC v3FieldId, SQL_COLUMN v2FieldId, HANDLER handler) +543
   System.Data.Odbc.OdbcDataReader.GetName(Int32 i) +183
   WebApplication2.WebForm1.Page_Load(Object sender, EventArgs e) in c:\Users\Mitto\Documents\Visual Studio 2012\Projects\WebApplication2\WebApplication2\WebForm1.aspx.cs:25
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

コードを直接書くのではなく、フォーム上にSqlDataSourceコントロールを配置した場合も、上と同様にSystem.Data.Odbc.OdbcDataReader.GetColAttributeStr のところでエラーが発生するために、たとえばGridView等にデータベースのデータを一覧表示することができません。

これは64ビット環境で実行したときのみ発生します。64ビットのPC上でもVisual Studioの開発サーバーを使用したり、IIS Expressを使用した場合は32ビット環境で実行されるらしく、エラーは発生しません。(Visual Studioは32ビットで動いているため。)IIS上に仮想ディレクトリを作成して実行した場合のみエラーになります。
DataDirect 32-BIT SequeLink 5.5を使用していたときも問題はありませんでした。もっともこのときは32ビット版しかありませんでしたが。

絶対にドライバの問題だという確実な証拠があるわけではありませが、今のところ一番疑わしいのはODBCドライバだと思います。
よろしくお願いします。

環境
FileMaker ODBC: 12.03.103.00
OS: Windows 2008R2 64bit
FileMaker Server Advanced: 12.0.4.405
.Net Framework: 4.0 or 4.5
Visual Studio : 2012 or 2010 どちらでも同じ

Outcomes