首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超出了OleDbException系统资源

超出了OleDbException系统资源
EN

Stack Overflow用户
提问于 2008-10-01 02:10:10
回答 5查看 15.7K关注 0票数 8

以下代码执行一个简单的insert命令。如果连续调用2,000次(插入2,000行),则会抛出消息为"System Resources Exceeded“的OleDbException。为了释放资源,我还需要做些什么吗?

代码语言:javascript
复制
using (OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand cmd = new OleDbCommand(commandText, conn))
{
    conn.Open();
    cmd.ExecuteNonQuery();
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-01 02:12:17

系统资源超出的错误不是来自托管代码,而是来自于您终止数据库(JET?)

你打开了太多连接,太快了.

一些小贴士:

  • 通过不为每个命令打开新连接来避免往返,并使用数据库连接池正在工作的单个connection.
  • Ensure执行插入。(不确定这是否适用于使用更优化的方式插入数据的OLEDB connections.)
  • Consider。

你试过这个吗?

代码语言:javascript
复制
using (OleDBConnection conn = new OleDBConnection(connstr))
{
    while (IHaveData)
    {
        using (OldDBCommand cmd = new OldDBCommand())
        {
            cmd.Connection = conn;
            cmd.ExecuteScalar();
        }
    }
}
票数 7
EN

Stack Overflow用户

发布于 2008-10-01 02:46:58

我在一个Access2007数据库中测试了这段代码,没有任何异常(我的插入次数高达13000次)。

然而,我注意到的是它非常慢,因为你每次都在创建一个连接。如果你把"using(connection)“放在循环之外,它会运行得更快。

票数 1
EN

Stack Overflow用户

发布于 2008-10-01 03:29:23

除了以上(只连接到数据库一次),我还想确保您关闭并处理您的连接。由于c#中的大多数对象都是托管的wrt内存,连接和流并不总是拥有这种奢侈,所以如果不释放这样的对象,就不能保证它们会被清除。这还有一个额外的效果,那就是在程序的生命周期内保持该连接是打开的。

另外,如果可能的话,我会考虑使用事务。我不知道您使用这段代码做什么,但是在数据库中插入和更新许多行时,OleDbTransactions非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/155959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档