winform连数据库需要关闭连接conn.Close()吗?

时间:2021-01-17 23:52:23
winform+数据库 每次查询完需要关闭数据库连接吗?

asp.net +数据库呢?  需要每次查询完关闭连接吗

12 个解决方案

#1


要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。

#2


引用 1 楼 xdashewan 的回复:
要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。

就是一般的系统里面

比如 第一次 登录   查询用户名  查询订单 之类的 一直在操作

默认有连接池
asp.net的话  登录后就Conn.Close();关闭数据库连接
然后查询用户名 再Conn.open  然后关闭 吗?

#3


适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

#4


引用 3 楼 xuzuning 的回复:
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

目前winform和asp.net 我都是 finally {conn.Close();}

现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次

如果程序一打开创建一个连接 不关闭   退出才关闭 会不会好点?

有连接池的情况下 不活动的连接 会自动回收吧?


            

#5


关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭

#6


引用 5 楼 xdashewan 的回复:
关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭


目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
public   ArrayList getList(string _sql)
{
ArrayList list = new ArrayList();
SqlConnection conn = DBconn();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
...
}
catch (Exception e)
{
}
finally
{
conn.Close();//这边是不是要关闭
}
return list;
}

#7


用完就关就行了。不是还有连接池嘛,不用考虑重新连接的效率之类的问题。

#8


引用 4 楼 life923 的回复:
Quote: 引用 3 楼 xuzuning 的回复:

适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

目前winform和asp.net 我都是 finally {conn.Close();}

现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次

如果程序一打开创建一个连接 不关闭   退出才关闭 会不会好点?

有连接池的情况下 不活动的连接 会自动回收吧?


            


执行了100次查询,在你的连接池上可能也不过就算是2、3次连接,而不是100次连接。不然也不会谈到“连接池”了。

你“打开创建一次连接”,这显然是你的程序太简单导致的。比如说你在查询且进行 DataReader 遍历操作中有调用其它含有查询功能的模块,那么打开一个连接的同时就要打开其它连接。再比如说但凡你的应用稍微讲究一点“并发”,也会打开多个连接。

如果你认为你的应用总是仅仅使用一个连接而不会崩溃,那么只能说明你的程序太简单了,只是学生课堂练习,所以你才以为什么都是“一个就够”。

哪一个实际的应用不会动态地要求对数据库系统的多个并发连接呢?

#9


至于说 asp.net,它天生就是多线程的。asp.net 对每一个页面请求都是在线程中分配一个消息线程来响应。

不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。

而你的桌面客户端,实际上也会有多连接的要求。

#10


引用 6 楼 life923 的回复:
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
public   ArrayList getList(string _sql)
{
ArrayList list = new ArrayList();
SqlConnection conn = DBconn();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
...
}
catch (Exception e)
{
}
finally
{
conn.Close();//这边是不是要关闭
}
return list;
}


既然你在 #4 楼已经提到“连接池”,那么我们就应该假设你真的知道连接池概念来考虑。

如果根本不知道连接池概念的人,他会误以为“打开、关闭”就是对数据库的物理连接。那么我们可以理解他这种混乱的错误说法。

但是假设你知道连接池机制,那么这个“关闭”就是把逻辑连接释放回连接池,这样连接池就能立刻把物理连接分享给其它的逻辑链接。如果此时你对于“打开、关闭”概念跟那些完全不知道连接池的人一样,这就说不过去了。

你尽快把逻辑连接释放回连接池,那么就能提高数据库连接的共享。反之,如果不及时释放,那就根本用不到连接池的好处。

#11


asp.net 对每一个页面请求都是在线程中分配一个消息线程 ->  asp.net 对每一个页面请求都是在线程池中分配一个消息线程

实际上这个关键是对线程池的理解。“打开、关闭”操作并不等同于打开和关闭数据库连接,要理解这个道理。

#12


连接池


sorry,现在比较晕,错别字较多。

#1


要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。

#2


引用 1 楼 xdashewan 的回复:
要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。

就是一般的系统里面

比如 第一次 登录   查询用户名  查询订单 之类的 一直在操作

默认有连接池
asp.net的话  登录后就Conn.Close();关闭数据库连接
然后查询用户名 再Conn.open  然后关闭 吗?

#3


适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

#4


引用 3 楼 xuzuning 的回复:
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

目前winform和asp.net 我都是 finally {conn.Close();}

现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次

如果程序一打开创建一个连接 不关闭   退出才关闭 会不会好点?

有连接池的情况下 不活动的连接 会自动回收吧?


            

#5


关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭

#6


引用 5 楼 xdashewan 的回复:
关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭


目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
public   ArrayList getList(string _sql)
{
ArrayList list = new ArrayList();
SqlConnection conn = DBconn();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
...
}
catch (Exception e)
{
}
finally
{
conn.Close();//这边是不是要关闭
}
return list;
}

#7


用完就关就行了。不是还有连接池嘛,不用考虑重新连接的效率之类的问题。

#8


引用 4 楼 life923 的回复:
Quote: 引用 3 楼 xuzuning 的回复:

适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的

目前winform和asp.net 我都是 finally {conn.Close();}

现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次

如果程序一打开创建一个连接 不关闭   退出才关闭 会不会好点?

有连接池的情况下 不活动的连接 会自动回收吧?


            


执行了100次查询,在你的连接池上可能也不过就算是2、3次连接,而不是100次连接。不然也不会谈到“连接池”了。

你“打开创建一次连接”,这显然是你的程序太简单导致的。比如说你在查询且进行 DataReader 遍历操作中有调用其它含有查询功能的模块,那么打开一个连接的同时就要打开其它连接。再比如说但凡你的应用稍微讲究一点“并发”,也会打开多个连接。

如果你认为你的应用总是仅仅使用一个连接而不会崩溃,那么只能说明你的程序太简单了,只是学生课堂练习,所以你才以为什么都是“一个就够”。

哪一个实际的应用不会动态地要求对数据库系统的多个并发连接呢?

#9


至于说 asp.net,它天生就是多线程的。asp.net 对每一个页面请求都是在线程中分配一个消息线程来响应。

不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。

而你的桌面客户端,实际上也会有多连接的要求。

#10


引用 6 楼 life923 的回复:
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
public   ArrayList getList(string _sql)
{
ArrayList list = new ArrayList();
SqlConnection conn = DBconn();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
...
}
catch (Exception e)
{
}
finally
{
conn.Close();//这边是不是要关闭
}
return list;
}


既然你在 #4 楼已经提到“连接池”,那么我们就应该假设你真的知道连接池概念来考虑。

如果根本不知道连接池概念的人,他会误以为“打开、关闭”就是对数据库的物理连接。那么我们可以理解他这种混乱的错误说法。

但是假设你知道连接池机制,那么这个“关闭”就是把逻辑连接释放回连接池,这样连接池就能立刻把物理连接分享给其它的逻辑链接。如果此时你对于“打开、关闭”概念跟那些完全不知道连接池的人一样,这就说不过去了。

你尽快把逻辑连接释放回连接池,那么就能提高数据库连接的共享。反之,如果不及时释放,那就根本用不到连接池的好处。

#11


asp.net 对每一个页面请求都是在线程中分配一个消息线程 ->  asp.net 对每一个页面请求都是在线程池中分配一个消息线程

实际上这个关键是对线程池的理解。“打开、关闭”操作并不等同于打开和关闭数据库连接,要理解这个道理。

#12


连接池


sorry,现在比较晕,错别字较多。