打开连接时尝试使用 Advantage OLE DB 提供程序访问 DBF 文件会引发异常

2024-02-06

我有一个 ASP.NET MVC 应用程序,它试图打开以下 OLE DB 连接:

string conString = @"Provider=Advantage OLE DB Provider;Data Source=" + dbfFilePath + ";Extended Properties=dBASE IV;";

using (dBaseConnection = new OleDbConnection(conString))
{
   dBaseConnection.Open();
   // Some stuff
}

我已经安装了以下软件包.

我使用此提供程序来访问 dbf 文件(在 dbfFilePath 变量上指定),然后向其中添加一些信息。当我对上面的代码片段执行“打开”命令时,我收到以下异常消息:

错误 6420:Advantage 数据库服务器的“发现”进程失败。无法连接到 Advantage 数据库服务器。 axServerConnect 广告连接。

以前我使用的是 VFPOLEDB.4 提供程序,在读取和修改 dbf 文件时它工作正常。问题是它仅在 32 位中可用(没有 64 位版本),现在我需要它在 64 位中,所以我决定使用在 64 位中可用的 Advantage OLE DB 提供程序据我所知,它与 VFPOLEDB 的作用相同。

我究竟做错了什么?

更新 2020/11/16: 如果我向连接字符串添加一些参数:

string conString = @"Provider=Advantage OLE DB Provider;Data Source=" + dbfFilePath + ";ServerType=ADS_LOCAL_SERVER;TableType=ADS_VFP;Extended Properties=dBASE IV;";

然后当打开连接时我得到以下异常:

错误 7077:无法打开 Advantage 数据字典。 axServerConnect 广告连接

更新 2020/11/20:

var dbfFilePath =@"C:\MyApp\Temp"; // using c:\MyApp\Temp\myTable.dbf does not work (below open command fails)

string conString = @"Provider=Advantage OLE DB Provider;Data Source=" + dbfFilePath + ";ServerType=ADS_LOCAL_SERVER; TableType=ADS_VFP;";

using (dBaseConnection = new OleDbConnection(conString))
{
   dBaseConnection.Open();
   OleDbCommand insertCommand = dBaseConnection.CreateCommand();
   insertCommand.CommandText = "INSERT INTO [myTable] VALUES (2,100)";
   insertCommand.ExecuteNonQuery();
}

注意:[myTable] 与 C:\MyApp\Temp 中的 dbf 文件同名。

现在 open 命令可以工作,但是在执行 insertCommand.ExecuteNonQuery() 时它会卡住(它什么也不做)。

更新 2020/11/27:

好吧,我想我已经发现发生了什么。在 32 位中使用 Advantage OLE DB 提供程序时可以正常工作,但是在 64 位中使用 Advantage OLE DB 提供程序则无法正常工作。在这两种情况下,我都在 Windows Server 2012 R2 Standard 64 位和 Advantage OLE DB 提供程序版本 11.10 上使用它。

我已经使用 LINQPad 5 检查了这一点,它可以工作,但是在执行时

insertCommand.ExecuteNonQuery()

...在插入 dbf 文件之前,会出现警告模式窗口,等待您单击“接受”按钮。单击按钮后,即可在 dbf 文件中正确插入。

因此,我猜想当在生产环境中运行我的 Web 应用程序(ASP.NET MVC 应用程序)时,不会出现此警告模式窗口,但实际上,它正在等待您单击按钮以继续在 dbf 文件中插入数据,但是由于此警告窗口不可见(未显示),我可以单击该按钮,因此 ExecuteNonQuery 永远不会结束(它停止),并且它会无限期地等待您单击该按钮。

我该如何解决这个错误?我可以以某种方式修改 ads.ini 以避免出现此警告消息,以便应用程序可以运行吗?


我看到您删除了我认为与这个问题最相关的 VFP 标签:)

我再次使用这些代码作为示例进行了测试,它运行顺利:

void Main()
{
    string dbfFilesPath = @"C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPRO 9\SAMPLES\Data";
    string conString = $@"Provider=Advantage OLE DB Provider;Data Source={dbfFilesPath};ServerType=ADS_LOCAL_SERVER;TableType=ADS_VFP;";
    DataTable t = new DataTable();
    using (OleDbConnection cn = new OleDbConnection(conString))
    using (OleDbCommand cmd = new OleDbCommand($@"insert into Customer 
        (cust_id, company, contact)
        values
        (?,?,?)", cn))
    {
        cmd.Parameters.Add("@cId", OleDbType.VarChar);
        cmd.Parameters.Add("@company", OleDbType.VarChar);
        cmd.Parameters.Add("@contact", OleDbType.VarChar);

        cn.Open();
        for (int i = 0; i < 10; i++)
        {
            cmd.Parameters["@cId"].Value = $"XYZ#{i}";
            cmd.Parameters["@company"].Value = $"Company XYZ#{i}";
            cmd.Parameters["@contact"].Value = $"Contact XYZ#{i}";
            cmd.ExecuteNonQuery();
        }

        t.Load(new OleDbCommand($"select * from Customer order by cust_id desc", cn).ExecuteReader());
        cn.Close();
    }
    t.Dump(); // tested in LinqPad AnyCPU version
}

这是我得到的部分结果:

XYZ#9  Company XYZ#9                            Contact XYZ#9                                                                                                                                                                                                                           0.0000 
XYZ#8  Company XYZ#8                            Contact XYZ#8                                                                                                                                                                                                                           0.0000 
XYZ#7  Company XYZ#7                            Contact XYZ#7                                                                                                                                                                                                                           0.0000 
XYZ#6  Company XYZ#6                            Contact XYZ#6                                                                                                                                                                                                                           0.0000 
XYZ#5  Company XYZ#5                            Contact XYZ#5                                                                                                                                                                                                                           0.0000 
XYZ#4  Company XYZ#4                            Contact XYZ#4                                                                                                                                                                                                                           0.0000 
XYZ#3  Company XYZ#3                            Contact XYZ#3                                                                                                                                                                                                                           0.0000 
XYZ#2  Company XYZ#2                            Contact XYZ#2                                                                                                                                                                                                                           0.0000 
XYZ#1  Company XYZ#1                            Contact XYZ#1                                                                                                                                                                                                                           0.0000 
XYZ#0  Company XYZ#0                            Contact XYZ#0                                                                                                                                                                                                                           0.0000 
XXXXXX Linked Server Company                                                                                                                                                                                                                                                            0.0000 
WOLZA  Wolski  Zajazd                           Zbyszek Piestrzeniewicz        Owner                          ul. Filtrowa 68                                              Warszawa                        01-012     Poland          (26) 642-7012            (26) 642-7012            3694 
WINCA  Wenna Wines                              Vladimir Yakovski              Owner                                                                                                                                                                                                    0.0000 
WILMK  Wilman Kala                              Matti Karttunen                Owner/Marketing Assistant      Keskuskatu 45                                                Helsinki                        21240      Finland         90-224 8858              90-224 8858              4400 
WHITC  White Clover Markets                     Karl Jablonski                 Owner                          305 - 14th Ave. S., Suite 3B                                 Seattle         WA              98128      USA             (206) 555-4112           (206) 555-4115           38900 
WELLI  Wellington Importadora                   Paula Parente                  Sales Manager                  Rua do Mercado, 12                                           Resende         SP              08737-363  Brazil          (14) 555-8122                                     3600 
WARTH  Wartian Herkku                           Pirkko Koskitalo               Accounting Manager             Torikatu 38                                                  Oulu                            90110      Finland         981-443655               981-443655               24200 

由于它不适合您,我认为这可能与以下内容有关:

  • 访问权。你说,你使用ASP.Net MVC,我想知道“连接帐户”是否只有读取权限?我记得在 IIS 中,基本设置中有一个连接方式设置。您至少可以将其设置为通过对该目录拥有完全权限的帐户进行连接。
  • 分享。该文件可能正在其他地方共享使用,并且由于某种原因您的插入正在等待尝试获取锁定?
  • 设置为空?另一个微小的可能性。您可能需要首先在同一连接上执行此操作。如果有些字段您没有在插入中提供值,但在表结构中提供“非空”,否则会导致插入失败。

您可以从以管理员权限运行的 LinqPad 中开始测试相同的文件,以消除所有访问权限(如果数据目录位于程序文件 or 程序文件 (x86),那么它本身就是一个问题。

我希望立即收到错误消息,但谁知道驱动程序是否正在等待超时以防写入访问失败?

一些想法(我这样做的方式:) 您可以创建一个在 32 位 IIS 应用程序池中运行(或使用其自己的 Web 服务)并通过 REST API(或 WCF)处理数据访问的服务器,而不是尝试使用具有 64 位访问权限的 VFP 数据。我多年来一直使用 32 位 ASP.Net MVC 应用程序,并成功使用 VFOLEDB 本身。 如果您想到 REST API 路径,您可能会使用 ASP.Net core(与 pre core 不同,速度更快)或使用其他东西,比如 Go 来构建它。例如,Go 和 Iris 框架非常适合在夜间为您的数据构建 REST API 服务器(您不太可能会想到 Go,但如果您这样做,请记住使用 x86 架构进行编译)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开连接时尝试使用 Advantage OLE DB 提供程序访问 DBF 文件会引发异常 的相关文章

随机推荐

  • 如何监控 OmniThreadLibrary 中的 Pipeline 阶段?

    是否可以以某种方式监控管道任务 我尝试像这样向每个任务添加监视器 FPipeline Parallel Pipeline Stage StageWorker1 Parallel TaskConfig MonitorWith MyMonito
  • 创建自定义凸路径Android

    我希望为我的框架布局设置一个自定义形状 矩形每个角的不同半径 以便框架布局中的视图将剪辑到形状的边界 ViewOutlineProvider provider new ViewOutlineProvider Override public
  • 通过客户端存根访问 WSDL 时出现 Java InaccessibleWSDLException

    我正在尝试为 Exchange Web 服务编写自定义 Java 客户端 我已经使用生成了客户端存根wsimport工具如所解释here http java dzone com articles jax ws hello world来自 E
  • 在 Linux 上编译一个共享库以面向所有发行版

    我们希望创建一个共享库 so 以针对所有发行版 包括旧发行版 该代码是用 C 编写的 并使用 C 11 功能 因此编译器必须至少为 gcc 4 7 我们注意到 如果我们在安装了 gcc 4 7 2 的 Linux 机器 例如 Ubuntu
  • 使用 php 将视频链接加载到 html 播放器

    我有 HTML 视频此标签用于视频播放
  • 如何在 Java Swing 工具栏中创建“下拉”菜单?

    我在 Swing JToolBar 上创建了一个下拉菜单 但它并没有按照我想要的方式创造行为 我的目标是让它像 Firefox 的 智能书签 按钮一样工作 当用户选择菜单项时它会消失 正确 当用户按 ESC 时它消失 正确 当用户单击菜单之
  • 为什么 swift 中没有 PerformSelector

    显然以下内容在 swift 中不再可用 self performSelector selector onFlip withObject nil afterDelay 0 3 如果仍然存在以下情况 为什么会出现这种情况 NSObject ca
  • 发现多种类型与名为“Account”的控制器匹配。 MVC 4 和使用 RouteConfig.CS

    我目前在同一文件夹中有 2 个项目 主要的 Project1 Project2 Problem 发现多种类型与名为的控制器匹配Account 如果服务此请求的路由可能会发生这种情况 controller action id 不指定命名空间来
  • 错误 rxjs_Observable__.Observable.forkJoin 不是函数?

    我在用Rxjs in an angualr cli应用 在viewer component ts中 Other Imports import Observable from rxjs Observable omitting for brev
  • 如何使用Python连接WiFi网络? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试用 Python 编写一个脚本 该脚本将使我能够搜索无线网络并连接到它们 有没有为此目的的Python 库 None
  • 任何使用 Red Gate 的 SQL 源代码控制的人

    我们一直在寻找 SQL 源代码控制的可能解决方案 我刚刚遇到 Red Gates SQL 源代码控制 想知道是否有人实现了它 我打算下载试用版并尝试一下 但只是想看看其他人是否有真实的体验 一如既往地非常感谢您的投入 S 我更新了下面的原始
  • 在字符串中插入填充空格

    非常基本的问题 但很难形成可接受的形式 我想通过每 3 个空格插入一个填充来转换字符串 例如 123456789 gt 123 456 789 abcdefgh gt abc def gh 我的代码目前是 public String toS
  • 如何只保存差异

    我有一个创建记录的函数 如下所示 func A db gorm DB b C error d e for f range b d append d g f return db Save d Error 我希望能够上传一些数据 可能是相同的
  • 如何将本地图像显示到控制台?

    我刚刚注意到javascript with css使之成为可能在开发者控制台中显示不同的样式 当然 这也使得在控制台中显示图像成为可能 由于我可以很好地在我的项目中使用这个功能 所以我想直接尝试一下 没有成功 使用下面的代码 我从这篇文章中
  • PHPWord addTOC 不显示页码

    我在用着https github com PHPOffice PHPWord https github com PHPOffice PHPWord生成word文档 函数 addTOC 生成带有标题的页面索引 但由于某种原因 页码不显示 ad
  • Three.js:将 3d 位置转换为 2d 屏幕位置

    我有一个位置为 x y z 的 3D 对象 如何计算该对象的屏幕位置 x y 我已经搜索过它 一个解决方案是我必须找出投影矩阵 然后将 3D 位置点乘以该矩阵 将其投影到某个 2D 观看表面 计算机屏幕 上 但我不知道如何在 Three j
  • 如何在 Google 日历中使用别名?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我有一个谷歌帐户 比如说 电子邮件受保护 cdn cgi l email protection
  • Fluent Validation 不会在第一次验证整个表单

    所以我在表单上使用 Fluent Validation 当我单击提交但未输入任何内容时 我收到出生日期验证错误 如果我输入 DoB 则会获得名字验证 为什么会发生这种情况 我不明白我连接错了什么 My form using Html Beg
  • 如何在数据库中保存时区信息?

    我正在使用 GWT Hibernate 我有一个使用 GWT 创建的表单 它有一个日期字段 用户可以在其中选择日期 还有一个下拉菜单 其中显示所有时区 现在用户从下拉列表中选择日期和时区 单击 保存 按钮时 我需要保存日期和时区信息 此外
  • 打开连接时尝试使用 Advantage OLE DB 提供程序访问 DBF 文件会引发异常

    我有一个 ASP NET MVC 应用程序 它试图打开以下 OLE DB 连接 string conString Provider Advantage OLE DB Provider Data Source dbfFilePath Exte