首页 新闻 会员 周边 捐助

SqlServer 数据库连接问题? 请高手解答

0
悬赏园豆:20 [已解决问题] 解决于 2011-05-18 11:12

我现在会在一个for 循环里面对数据库进行操作,每一次操作后,都会把SqlConnection 关闭。 但是当我的for循环次数太多时,就会出现异常,在网上查了下资料,说是 SqlConnection的Close() 方法,并不会即时的关闭数据库连接,而是会存在一个默认的时间,当过了这个时间后,他才会真正的关闭,请问,有能即时关闭的方法么?或者修改那个默认时间的方法? (SqlConnection 的 Dispose() 方法除外)

迷、的主页 迷、 | 初学一级 | 园豆:12
提问于:2011-01-06 22:49
< >
分享
最佳答案
0

for 循环 完毕后在关数据库连接。这样可以减少资源耗费。Close虽然不会立即关闭,但是从连接池获取连接也是要耗费资源的。sql尽量用参数方式,这样可以减少dbserver cpu的占用率,因为sql不需要重复编译。大概代码如下:

using(var con=new Connection())

{

    var command=//创建Parameter列表和SqlCmmand

     for(int i=0;i<max;i++)

     {

            //把Value值 给 commnad.Parameters

            command.execute()

      }

}

当然还有其他的优化方式,但至少要做到上面那种。

收获园豆:20
沉默的糕点 | 小虾三级 |园豆:1786 | 2011-01-07 00:52
其他回答(7)
0

你能把For里要做的事情直接在一次操作数据库的时候做完不就更吗。?至少像你这样操作数据库的还真不多见

tyb1222 | 园豆:259 (菜鸟二级) | 2011-01-06 23:38
0

如果你非要这样写的话,你必须其他用到sqlconnection 的地方都要加条判断

 

//假如你的sqlconnection对象是sqlcon
if (sqlcon.State != ConnectionState.Open)
{
sqlcon.Open();
}

或者

if(sqlcon.State!=Connection.Closed)
{
sqlcon.Close();
}

这样希望能够避免你代码中的其他错误

寒狐 | 园豆:433 (菜鸟二级) | 2011-01-07 09:47
0

如果是同一个链接的话,为什么每次要new一个链接?

顾晓北 | 园豆:10898 (专家六级) | 2011-01-07 10:26
0

出现什么样的异常?

dudu | 园豆:30587 (高人七级) | 2011-01-07 11:22
就是报超时。而且这些方法调用的是封装后的SqlHelper 在这个类里的每个方法都会打开连接,关闭连接。所以造成这样一种情况。有没有办法能即时关闭连接。
支持(0) 反对(0) 迷、 | 园豆:12 (初学一级) | 2011-01-07 15:01
0

每次打开的时候判断它的状态,使用using。

Astar | 园豆:40805 (高人七级) | 2011-01-07 14:24
0

using(SQLConnnection conn=new *****)

{

     //

}

这样每次用完就会自己关闭了。但你的需求很诡异啊。是非常诡异,我们都是尽量减少数据库连接,因为连接数据库是很浪费性能的。数据库连接最好是单例的,放在那边,一次初始化永远使用多好啊

BLoodMaster | 园豆:135 (初学一级) | 2011-01-07 16:16
0

既然你都用FOR了,为什么不把SQL全拼在一起,然后一次性的执行数据库操作呢?这样对性能的资源都消耗的少

头衔 | 园豆:364 (菜鸟二级) | 2011-01-07 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册