我有一个 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 以避免出现此警告消息,以便应用程序可以运行吗?