微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access .md 和 .accdb 文件的 ODBC 驱动程序是否只能处理 64 次执行? 更新 19.01.2021

如何解决MS Access .md 和 .accdb 文件的 ODBC 驱动程序是否只能处理 64 次执行? 更新 19.01.2021

我正在编写一个 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 事件始终相同。 相应的解决方案是: 该问题是由从表中读取引起的。 如果读者没有关闭或处理,这会导致错误。

如果你想控制连接,你必须更深入地控制读写操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。