如何使用VB.Net在64位操作系统上读取DBF文件?

如何使用VB.Net在64位操作系统上读取DBF文件?,vb.net,dbf,Vb.net,Dbf,如何使用VB.Net在64位操作系统上读取DBF文件?您需要将程序编译为32位;它在64位操作系统上仍能正常运行。将平台目标更改为“x86”,而不是“任意CPU”或“x64”。然后,您可以使用Visual FoxPro Ole Db提供程序访问dbf文件。您需要将程序编译为32位;它在64位操作系统上仍能正常运行。将平台目标更改为“x86”,而不是“任意CPU”或“x64”。然后,您可以使用Visual FoxPro Ole Db提供程序访问dbf文件。首先,您需要访问64位可再发行文件,可从以

如何使用VB.Net在64位操作系统上读取DBF文件?

您需要将程序编译为32位;它在64位操作系统上仍能正常运行。将平台目标更改为“x86”,而不是“任意CPU”或“x64”。然后,您可以使用Visual FoxPro Ole Db提供程序访问dbf文件。

您需要将程序编译为32位;它在64位操作系统上仍能正常运行。将平台目标更改为“x86”,而不是“任意CPU”或“x64”。然后,您可以使用Visual FoxPro Ole Db提供程序访问dbf文件。

首先,您需要访问64位可再发行文件,可从以下位置获得:

然后,您可以在控制面板、管理工具、数据源(ODBC)中配置ODBC数据源

然后,我就可以用C#来完成这项工作,如下所示:;这在VB.NET中应该类似:

var connectionString = "Driver={Microsoft dBASE Driver (*.dbf)};" +
                                                      "Driverid=277;" +
                                                      @"Dbq=C:\temp\";

var query = "SELECT * FROM UPDATED" //file is "updated.dbf"


using (var oConn = new OdbcConnection { ConnectionString = connectionString })
            {
                try
                {
                    oConn.Open();
                    var oCmd = oConn.CreateCommand();
                    oCmd.CommandText = Query;

                    var dr = oCmd.ExecuteReader();

                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {

                // get your data from your dbf!
                        }
                    }
                }
                finally
                {
                    oConn.Close();
                }
            }

首先,您需要access 64位可再发行文件,可从以下网址获得:

然后,您可以在控制面板、管理工具、数据源(ODBC)中配置ODBC数据源

然后,我就可以用C#来完成这项工作,如下所示:;这在VB.NET中应该类似:

var connectionString = "Driver={Microsoft dBASE Driver (*.dbf)};" +
                                                      "Driverid=277;" +
                                                      @"Dbq=C:\temp\";

var query = "SELECT * FROM UPDATED" //file is "updated.dbf"


using (var oConn = new OdbcConnection { ConnectionString = connectionString })
            {
                try
                {
                    oConn.Open();
                    var oCmd = oConn.CreateCommand();
                    oCmd.CommandText = Query;

                    var dr = oCmd.ExecuteReader();

                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {

                // get your data from your dbf!
                        }
                    }
                }
                finally
                {
                    oConn.Close();
                }
            }

而不是Microsoft.Jet.OLEDB。。。您必须使用Microsoft.ACE.OLEDB。。。在Win7中的连接字符串中。有关更多信息,请访问www.connectionstrings.com的accdb部分。您可以作为表连接到DBF文件并查询数据/模式

如果您的Win7为64位,MS Office为32位(Taskmanager winword.exe*32),则ACE驱动程序将以32位模式安装,因此您的程序/源代码将不会连接到DBF文件

如何查找。

在C:\windows\sysWoW64\odbcad32.exe打开32位ODBC模拟器,然后转到“驱动程序”选项卡。您必须看到许多要连接的驱动程序,在这些驱动程序中您可以找到ACE提供商

在C:\windows\system32\odbcad32.exe打开64位ODBC管理员并转到“驱动程序”选项卡。您必须只看到“SQL server”驱动程序,或者只看到少数特定于64位的驱动程序,但不能看到ACE驱动程序

解决方案

  • 在x86模式下编译当前程序以使用32位仿真器驱动程序
  • 另一个解决方案是确定是否可以卸载32位MS Office并获得64位版本。这将自动解决所有问题
  • 祝你好运


    Venkat取代了Microsoft.Jet.OLEDB。。。您必须使用Microsoft.ACE.OLEDB。。。在Win7中的连接字符串中。有关更多信息,请访问www.connectionstrings.com的accdb部分。您可以作为表连接到DBF文件并查询数据/模式

    如果您的Win7为64位,MS Office为32位(Taskmanager winword.exe*32),则ACE驱动程序将以32位模式安装,因此您的程序/源代码将不会连接到DBF文件

    如何查找。

    在C:\windows\sysWoW64\odbcad32.exe打开32位ODBC模拟器,然后转到“驱动程序”选项卡。您必须看到许多要连接的驱动程序,在这些驱动程序中您可以找到ACE提供商

    在C:\windows\system32\odbcad32.exe打开64位ODBC管理员并转到“驱动程序”选项卡。您必须只看到“SQL server”驱动程序,或者只看到少数特定于64位的驱动程序,但不能看到ACE驱动程序

    解决方案

  • 在x86模式下编译当前程序以使用32位仿真器驱动程序
  • 另一个解决方案是确定是否可以卸载32位MS Office并获得64位版本。这将自动解决所有问题
  • 祝你好运


    Venkat

    但要小心使用dBase驱动程序-只有当dbf文件确实是dBase文件,而不是例如FoxPro文件时,它才能正常工作。我找不到有关该软件包中是否还包含x64 FoxPro驱动程序的任何信息。如果这种方法对您不起作用,或者您无法确定将获得的DBF的“味道”,那么您最好按照Eyvind的建议专门针对x86。但是,如果在类库中执行此操作,请记住,此x86决策需要通过引用进行调整,或者通过引入服务层来减轻影响。不过,请小心使用dBase驱动程序-只有当dbf文件确实是dBase文件时,它才能正常工作,我找不到任何关于该软件包中是否包含x64 FoxPro驱动程序的信息。如果这种方法对您不起作用,或者您无法确定将获得的DBF的“味道”,那么您最好按照Eyvind的建议专门针对x86。但是,如果您是在类库中这样做的,请记住,这个x86决策需要在引用中反复出现,或者通过引入服务层来缓解。