You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于MS Access ODBC驱动仅支持64次执行的问题咨询

关于MS Access ODBC驱动64次执行限制的问题解答

我确实遇到过这个问题!旧版的MS Access ODBC Jet驱动确实存在这个诡异的64次执行上限——本质是驱动内部的句柄泄漏,累计到64个未释放的资源后就会卡住,必须重启进程才能恢复,这是驱动本身的bug,不是你的代码问题。

针对你的需求,这里有几个性能更优的替代方案:

1. 改用OleDb驱动

.NET自带的System.Data.OleDb是专门为Access这类OLE DB数据源设计的,稳定性和性能都比ODBC驱动好一大截,而且完全没有这个64次执行的限制。示例代码如下:

using System.Data.OleDb;

// 构建.mdb文件的连接字符串
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\your-database.mdb;";

using (var conn = new OleDbConnection(connectionString))
{
    conn.Open();
    using (var cmd = new OleDbCommand("INSERT INTO YourTable (Column1) VALUES (@Value)", conn))
    {
        cmd.Parameters.AddWithValue("@Value", "TestContent");
        cmd.ExecuteNonQuery();
        // 重复执行操作也不会触发次数限制
    }
}

2. 使用ACE驱动(推荐)

如果你的环境支持,更推荐用**Microsoft Access Database Engine (ACE)**驱动,它是Jet驱动的升级替代版本,支持32/64位程序,稳定性更强,同时兼容.mdb和.accdb格式。注意要安装和程序位数匹配的ACE版本(32位程序装32位ACE,64位同理),避免兼容性报错。

ACE的OleDb连接字符串示例:

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\your-database.mdb;Persist Security Info=False;";

3. 若坚持用ODBC的优化方案

如果因为某些原因必须使用ODBC,一定要严格管理资源,用using语句包裹所有OdbcConnectionOdbcCommandOdbcDataReader对象,强制释放资源,可能能缓解这个问题,但不如换驱动彻底:

using (var conn = new OdbcConnection("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\your-database.mdb;"))
{
    conn.Open();
    for (int i = 0; i < 100; i++)
    {
        using (var cmd = new OdbcCommand("INSERT INTO YourTable (Column1) VALUES ('Test')", conn))
        {
            cmd.ExecuteNonQuery();
        }
    }
}

总结一下:优先选择OleDb或ACE驱动,既能解决64次执行的限制问题,又能获得更好的性能和稳定性。

内容的提问来源于stack exchange,提问作者Buh

火山引擎 最新活动