用Odbc讀取dbf文件可能存在的問題且不易被發現

       近幾天新建一個項目(這裏稱爲A項目)做測試,第一步是讀dbf文件,使用了一直在用的Odbc方式,測試環境64位win7,vs2005,已安裝了ODBC驅動(VFPODBC.msi)。代碼如下:

string connString = @"Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=E:\20140513\ALLHK.dbf;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";

string file = "E:\\20140513\\ALLHK.dbf";

DataTable dt = DbfModel.Query("select * from [" + file + "]", connString);

//DbfModel類的部分方法如下

public static OdbcConnection GetConnection(string connstr)
        {
            OdbcConnection conn = null;
            try
            {
                conn = new OdbcConnection(connstr);
            }
            catch (Exception e)
            {
                throw new Exception(connstr + "\n" + e.Message);
            }
            return conn;
        }


public static DataTable Query(string sql, string connstr)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            ds.Tables.Add(dt);
            OdbcConnection conn = null;
            try
            {
                conn = GetConnection(connstr);
                OdbcDataAdapter sda = new OdbcDataAdapter(sql, conn);
                conn.Open();
                sda.Fill(dt);
                dt = ds.Tables[0];

            }
            catch (Exception e)
            {
                throw new Exception(sql + "\n" + e.Message);
            }
            finally
            {
                try { conn.Close(); }
                catch { }
            }
            return dt;
        }

程序運行到DbfModel.Query("select * from [" + file + "]", connString);處就報錯:ERROR [IM002] [Microsoft][ODBC 驅動程序管理器] 未發現數據源名稱並且未指定默認驅動程序。

同樣是這個環境,另一個項目(這裏稱爲B項目)同樣的方法讀同一個dbf文件,卻不報錯。odbc驅動早就裝好了的,不可能是這個問題。在B項目中調試發現B項目中的file的路徑

中斜槓是雙斜槓\\,A項目調試中的file的路徑中斜槓是單斜槓\。正當我百思不得其解時,忽然我想到A項目爲了兼容性,生成的目標平臺設置成了x86,而B項目生成的目標平臺是any cpu。馬上把B項目生成的目標平臺設置爲x86一切正常,把A項目生成的目標平臺設置爲any cpu,這回輪到A項目報錯了。


結論:一切是odbc驅動造成的,安裝的VFPODBC.msi驅動不支持64位系統,如果一定要用odbc方式,解決的辦法只有2個。

1.只有把項目生成的目標平臺設置爲x86才能在64位系統下以兼容形式運行。

2.安裝支持64位的odbc驅動



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章