共享到FoxPro数据库的OleDbConnection

本文关键字:OleDbConnection 数据库 FoxPro 共享 | 更新日期: 2024-10-22 21:41:46

我正试图将FoxPro表读取到c#DataTable中,问题是我在读取时需要将其打开到其他地方。我一直在寻找一种方法来共享连接或类似的东西。如有任何帮助,我们将不胜感激。这是我现在使用的方法:

public DataTable ReadBulkDBC(string dbfFile, string query, int maxRows, string dynamicValue)
{
    DataTable dt = new DataTable();
    using (OleDbConnection connection = new OleDbConnection(@"Provider=VFPOLEDB.1; Mode=Share Deny None; Exclusive=OFF; Data Source=" + dbfFile))
    {
        connection.Open();
        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = query;
        dt.Columns.Add(new DataColumn("updateId", typeof(int)));
        if (!dbfFile.Contains("con_compania")) { dt.Columns.Add(new DataColumn("dynamic", typeof(string))); }
        dt.Columns.Add(new DataColumn("fechasync", typeof(DateTime)));
        OleDbDataAdapter oda = new OleDbDataAdapter(command);
        //DataSet ds = new DataSet();
        oda.Fill(dt);
        //dt = ds.Tables[0];
    }
    return dt;
}

共享到FoxPro数据库的OleDbConnection

我过去曾成功地在OleDbCommand/Connection上调用SET EXCLUSIVE OFF,然后再将其用于数据集操作。

我使用了如下代码作为"初始化"连接的一部分:

string commandText = "SET NULL ON'r'nSET DELETED ON'r'nSET EXCLUSIVE OFF"; command.CommandType = CommandType.Text; command.CommandText = commandText; command.ExecuteNonQuery();

此代码在对连接执行任何其他操作之前执行。

由于看不到变量中的值,您就有了一个参数"dbfFile"。如果这是实际TABLE的名称,那么这就是问题所在。您的CONNECTION STRING应该只指向.dbf文件所在的PATH。连接到PATH的连接后,您应该能够从该文件夹中的任何.DBF进行查询。

这就是你的问题吗?

然后有一个问题要问你。。。SOURCE应用程序(VFP版本)是否确实将文件置于独占模式而不共享?如果这是独家的,你就不能做任何其他事情。

但是,如果您的连接是到PATH''TableName.dbf,则该连接将永远不会打开,因为您无法连接到.dbf…

如果您可以访问VFP,并且可以仅出于健全性检查目的。。。创建一个新表,并向其中添加一条简单记录。将其放在与要连接的另一个表所在的路径相同的路径中。然后尝试从THE NEW表进行查询。运行中的应用程序不知道这个表,因此永远不会打开它。这样你应该不会有任何问题尝试打开/查询它

从VFP内部。。。

CD "path to your production data"
create table _TempFileForCSharp ( testfield c(10), intfield i )
use

现在,从C#中,尝试对表"_TempFileForCSharp"运行查询,只需确保连接到.dbf所在的PATH,不要连接到实际的.dbf