asp.net +数据库呢? 需要每次查询完关闭连接吗
12 个解决方案
#1
要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。
#2
就是一般的系统里面
比如 第一次 登录 查询用户名 查询订单 之类的 一直在操作
默认有连接池
asp.net的话 登录后就Conn.Close();关闭数据库连接
然后查询用户名 再Conn.open 然后关闭 吗?
#3
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的
毕竟数据库不是为你一个人服务的
#4
目前winform和asp.net 我都是 finally {conn.Close();}
现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次
如果程序一打开创建一个连接 不关闭 退出才关闭 会不会好点?
有连接池的情况下 不活动的连接 会自动回收吧?
#5
关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭
#6
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
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
执行了100次查询,在你的连接池上可能也不过就算是2、3次连接,而不是100次连接。不然也不会谈到“连接池”了。
你“打开创建一次连接”,这显然是你的程序太简单导致的。比如说你在查询且进行 DataReader 遍历操作中有调用其它含有查询功能的模块,那么打开一个连接的同时就要打开其它连接。再比如说但凡你的应用稍微讲究一点“并发”,也会打开多个连接。
如果你认为你的应用总是仅仅使用一个连接而不会崩溃,那么只能说明你的程序太简单了,只是学生课堂练习,所以你才以为什么都是“一个就够”。
哪一个实际的应用不会动态地要求对数据库系统的多个并发连接呢?
#9
至于说 asp.net,它天生就是多线程的。asp.net 对每一个页面请求都是在线程中分配一个消息线程来响应。
不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。
而你的桌面客户端,实际上也会有多连接的要求。
不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。
而你的桌面客户端,实际上也会有多连接的要求。
#10
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
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,现在比较晕,错别字较多。
sorry,现在比较晕,错别字较多。
#1
要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。
#2
要不要关,关键看你的每次如何定义。例如你把一个http请求做为一次,那么你可以执行N次数据库操作而暂时不关连接,直到你回发response。
就是一般的系统里面
比如 第一次 登录 查询用户名 查询订单 之类的 一直在操作
默认有连接池
asp.net的话 登录后就Conn.Close();关闭数据库连接
然后查询用户名 再Conn.open 然后关闭 吗?
#3
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的
毕竟数据库不是为你一个人服务的
#4
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的
目前winform和asp.net 我都是 finally {conn.Close();}
现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次
如果程序一打开创建一个连接 不关闭 退出才关闭 会不会好点?
有连接池的情况下 不活动的连接 会自动回收吧?
#5
关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭
#6
关与不关取决于实际业务,登录如果作为一个独立操作就需要关闭,因为登录完成后谁不知道对方下次操作是什么时候。反之如果登录和查询用户名及订单是一个连续操作,用户登录后自动带出订单信息,此时就可以把登录和查询看作一个业务,可以不关闭
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
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
适时关闭数据库连接,是良好的习惯
毕竟数据库不是为你一个人服务的
目前winform和asp.net 我都是 finally {conn.Close();}
现在感觉在winform程序里面是不是太频繁打开关闭了
比如winform客户端执行了一百次查询就要频繁打开关闭一百次
如果程序一打开创建一个连接 不关闭 退出才关闭 会不会好点?
有连接池的情况下 不活动的连接 会自动回收吧?
执行了100次查询,在你的连接池上可能也不过就算是2、3次连接,而不是100次连接。不然也不会谈到“连接池”了。
你“打开创建一次连接”,这显然是你的程序太简单导致的。比如说你在查询且进行 DataReader 遍历操作中有调用其它含有查询功能的模块,那么打开一个连接的同时就要打开其它连接。再比如说但凡你的应用稍微讲究一点“并发”,也会打开多个连接。
如果你认为你的应用总是仅仅使用一个连接而不会崩溃,那么只能说明你的程序太简单了,只是学生课堂练习,所以你才以为什么都是“一个就够”。
哪一个实际的应用不会动态地要求对数据库系统的多个并发连接呢?
#9
至于说 asp.net,它天生就是多线程的。asp.net 对每一个页面请求都是在线程中分配一个消息线程来响应。
不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。
而你的桌面客户端,实际上也会有多连接的要求。
不仅仅是asp.net,其实任何服务器端处理都需要并发。因此必定是需要对数据库保持多连接的。
而你的桌面客户端,实际上也会有多连接的要求。
#10
目前都是通过数据库操作类来实现查询的 就是在这个操作类里面要不要关闭的问题
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,现在比较晕,错别字较多。
sorry,现在比较晕,错别字较多。