如何使用VFP OLE DB提供程序关闭表

时间:2019-10-30 17:12:52

标签: c# .net oledb visual-foxpro oledbconnection

我正在用C#编写一些软件,随着时间的推移,这些软件将对Visual FoxPro数据文件执行查询。我需要能够关闭表,尤其是那些专门打开的表(“连接字符串”中的“ Mode = Share Exclusive”),但是我似乎可以做到的唯一方法是关闭整个OleDbConnection。

VFP OLE DB提供程序支持VFP本身的某些语法,但是将在标准VFP中关闭表的命令(例如USE)不起作用,或者引发异常(我不记得哪个命令引发了异常)此刻)。

当前,一个类的每个实例都有其自己的OleDbConnection属性,因此,如果需要,我可以关闭它并释放它可以使用的表。尽管此方法有效,但它并不是最佳选择,我希望有1个连接实例。

// Elsewhere, ideally one connection for the entire process,
// if I'm able to release locks
public OleDbConnection Connection { get; } = new OleDbConnect();



// ...


if(Connection.State == ConnectionState.Closed) {
    Connection.ConnectionString = "Provider=vfpoledb.dll;Data Source=J:\\epdata\\;Mode=Share Exclusive"
    Connection.Open();
}
OleDbCommand cmd = new OleDbCommand("SET DELETED OFF", Connection);
cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT * FROM tran";
OleDbDataAdapter adap = new OleDbDataAdapter(cmd);
DataTable table = new DataTable();
adap.Fill(table);


// Something here to release the lock on the tran table

这工作到可以选择数据并锁定表以供当前OleDbConnection独占使用的地步,但是我找不到在不关闭整个连接的情况下释放该独占锁的任何方法,我试图避免要做。

1 个答案:

答案 0 :(得分:0)

我看不到专门打开连接然后使用适配器填充表的位置,然后要释放锁的点。首先不需要连接,适配器会根据需要打开和关闭连接:

DataTable table = new DataTable();
new OleDbDataAdapter("SELECT * FROM tran", 
      @"Provider=vfpoledb;Data Source=J:\epdata;Deleted=off")
  .Fill(table);