【发布时间】:2019-10-30 17:12:52
【问题描述】:
我正在用 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 独占使用,但我无法找到任何方法来释放该独占锁而不关闭整个连接,我试图避免这种情况不得不做。
【问题讨论】:
标签: c# .net oledb visual-foxpro oledbconnection