OleDbException系统资源超出(OleDbException System Resourc

2019-07-23 00:42发布

下面的代码执行一个简单的插入命令。 如果它被称为连续2000次(插入2000行)与消息的OleDbException =“系统资源超过”被抛出。 有别的我应该做的事,以腾出资源?

using (OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand cmd = new OleDbCommand(commandText, conn))
{
    conn.Open();
    cmd.ExecuteNonQuery();
}

Answer 1:

该系统的资源超过误差不会从托管代码来,它从你杀死你的数据库来(JET?)

您正在打开的方式很多连接,方法快...

一些技巧:

  • 通过不打开为每一个命令一个新的连接避免往返,并使用单个连接执行插入。
  • 确保数据库连接池的工作(不知道是否与OLEDB连接工程)。
  • 考虑使用更加优化的方式来插入数据。

您是否尝试过这个?

using (OleDBConnection conn = new OleDBConnection(connstr))
{
    while (IHaveData)
    {
        using (OldDBCommand cmd = new OldDBCommand())
        {
            cmd.Connection = conn;
            cmd.ExecuteScalar();
        }
    }
}


Answer 2:

我测试了这个代码不与Access 2007数据库,没有例外(我就高达13000插入)。

不过,我注意到的是,它是非常缓慢,因为要创建每次连接。 如果你把“使用(连接)”外循环,它会快得多。



Answer 3:

除了上述(连接到数据库只有一次),我也想确保你关闭你的连接配置。 在C#的大多数对象的管理WRT存储,连接和流没有这种豪华始终,因此,如果这样的对象没有设置的,他们不能保证被清理。 这有离开打开你的程序的生命该连接的附加效果。

另外,如果可能的话,我会考虑使用事务。 我不能告诉你正在使用的这个代码,但插入和更新数据库中的许多行时OleDbTransactions是有用的。



Answer 4:

我不知道具体细节,但我也碰到类似的问题跑了。 我们利用与IIS Access数据库服务于我们的客户。 我们没有很多的客户,但也有很多连接的单个会话期间被打开和关闭。 大约一个星期的工作后,我们收到了同样的错误,所有连接尝试失败。 要纠正这个问题,我们需要做的就是重新启动工作进程。

经过一番研究,我发现(当然),其访问不在这个环境中表现良好。 资源没有得到正确释放,并随着时间的推移可执行文件将用完。 为了解决这个问题,我们将移动到Oracle数据库。 如果不能解决这个问题,我将让你在我的调查结果更新。



Answer 5:

这可以发生,因为你没有配置创建的连接和Command对象。 总是在处置结束的对象。

OledbCommand.Dispose();


文章来源: OleDbException System Resources Exceeded