c# - 如何使用 VFP OLE DB 提供程序关闭表
问题描述
我正在用 C# 编写一些软件,这些软件将随着时间的推移对 Visual FoxPro 数据文件执行查询。我需要能够关闭表,尤其是那些以独占方式打开的表(连接字符串中的“模式=共享独占”),但我似乎可以做到这一点的唯一方法是关闭整个 OleDbConnection。
VFP OLE DB Provider 支持 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 独占使用,但我找不到任何方法来释放该独占锁而不关闭整个连接,我试图避免这样做.
解决方案
我没有看到专门打开连接然后使用适配器填充表的点,之后您想要释放锁定。您首先不需要连接,适配器会根据需要打开和关闭连接:
DataTable table = new DataTable();
new OleDbDataAdapter("SELECT * FROM tran",
@"Provider=vfpoledb;Data Source=J:\epdata;Deleted=off")
.Fill(table);
推荐阅读
- swift - 错误:转义闭包捕获变异的“自我”参数
- github - 如何创建启动另一个 GitHub 操作工作流的 GitHub 操作工作流?
- css - '类别'更改的flexbox表中的粘性左侧单元格
- r - 将模式添加到与另一个模式匹配的列名
- django - django分页页面中不同数量的记录
- unity3d - 当前的 64 位 Unity 2020 是否仍支持 32 位 (x86) 本机 DLL?
- amazon-web-services - 如何在 AWS 中实现服务管理器
- html - 视频不自动播放
- css - Nebular NbSidebar 和 NbMenuItem:选定项目的高度和焦点
- sql - 如何从 sqlalchemy 中的匹配 ID 列表中获得相等数量的行?