以下代码执行一个简单的insert命令。如果连续调用2,000次(插入2,000行),则会抛出消息为"System Resources Exceeded“的OleDbException。为了释放资源,我还需要做些什么吗?
using (OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand cmd = new OleDbCommand(commandText, conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}发布于 2008-10-01 02:12:17
系统资源超出的错误不是来自托管代码,而是来自于您终止数据库(JET?)
你打开了太多连接,太快了.
一些小贴士:
你试过这个吗?
using (OleDBConnection conn = new OleDBConnection(connstr))
{
while (IHaveData)
{
using (OldDBCommand cmd = new OldDBCommand())
{
cmd.Connection = conn;
cmd.ExecuteScalar();
}
}
}发布于 2008-10-01 02:46:58
我在一个Access2007数据库中测试了这段代码,没有任何异常(我的插入次数高达13000次)。
然而,我注意到的是它非常慢,因为你每次都在创建一个连接。如果你把"using(connection)“放在循环之外,它会运行得更快。
发布于 2008-10-01 03:29:23
除了以上(只连接到数据库一次),我还想确保您关闭并处理您的连接。由于c#中的大多数对象都是托管的wrt内存,连接和流并不总是拥有这种奢侈,所以如果不释放这样的对象,就不能保证它们会被清除。这还有一个额外的效果,那就是在程序的生命周期内保持该连接是打开的。
另外,如果可能的话,我会考虑使用事务。我不知道您使用这段代码做什么,但是在数据库中插入和更新许多行时,OleDbTransactions非常有用。
https://stackoverflow.com/questions/155959
复制相似问题