问题描述
我正在编写一个 C# 程序,我需要使用 Odbc api 连接到 .mdb 数据库文件。
经过规划、实施和测试,现在出现了一个大问题。
似乎,MS Access 驱动程序只能处理精确的 64 次执行。
之后,程序必须重新启动。
有人可以确认这个问题吗?
或者是否有其他驱动程序,它们的性能也更好?
您好.. :)
解决方法
在检查资源清理的想法之后,我得到了答案.. -.- :
来自 C# 的用于处理资源的“using”指令对 OdbcConnection 对象没有影响。 您必须在下一个右括号之前调用 Disponse 方法。 这个右括号调用 Disponse 方法,但是 - 我真的不知道为什么 - 这没有影响。
using (OdbcConnection conn = new OdbcConnection(string.Format(connStr,odbcDriver,dbq,pwd)))
{
conn.Open();
Console.WriteLine($"Conn Create");
await using OdbcCommand cmd = conn.CreateCommand();
await cmd.CommandText = "select * from [testmodel];";
cmd.Prepare();
DbDataReader reader = cmd.ExecuteReader();
Console.WriteLine($"DB EXEC COUNT '{i}'");
await conn.DisposeAsync();
}
我尝试了 pyhons pyodbc 来重现,这不是语言问题......好吧 它工作得很好..
with pyodbc.connect(f"Driver={dbAccessDriver};Dbq={dbFilePath};Pwd={dbPassword}") as conn:
conn: pyodbc.Connection
cmd: pyodbc.Cursor = conn.cursor()
cmd.execute("insert into [testmodel] values (?,?)",(i,"Name " + str(i)))
cmd.commit()
向所有程序员问好..
更新 19.01.2021
好吧,我的最后一个答案并不像我预期的那样正确。 我以为我已经解决了这个问题,但事实并非如此。
实际上,我的最后一个解决方案基于连接的 using 语法之后的已处理方法,并且必须起作用,因为触发的 Disposed 事件始终相同。 相应的解决方案是: 该问题是由从表中读取引起的。 如果读者没有关闭或处理,这会导致错误。
如果你想控制连接,你必须更深入地控制读写操作。