用asp.net和c#开发网站需要连接数据库多次吗?

时间:2022-06-15 13:18:52
我最近在看一些asp.net和c#开发网站的源码。
我发现很多demo程序跟数据库打交道的时候都是
如果有一个页面要从数据库取得数据时都是先连接数据库。取得
数据。断开数据库连接。。
对每一个要跟数据库交互的页面都是如此。
如此反复。。
我想问一下。
每一次取数据都要取连接数据库。也就是每次都要声明一个connection对象。
用完再断开。这样好吗?
为什么不一直连着呢?直到他退出网站为止。。
就是说用一个全局connection对象
而不是再程序里面声明一个局部的。
我以前没有做过网站。理解不对还请各位高手多多指教。
但我以前用ado作intranet的时候都是一个用户登陆直到他退出程序。
他都是连再数据库上面的。

18 个解决方案

#1


可以用一个全局connection对象

但不说,就不是不用连接多次了

因为你总不能连着不放吧

#2


一直连在上面不是个好主意,会出很多问题的~
如果你不想每次都写这个连接字符串,可以定义一个全局字符串常量,以后直接OPen一下就可以了。

#3


<configuration> 
<system.web>
........
</system.web>

<!--注意要放在<system.web>节点外-->
<appSettings>
        <add key="myConn" value="server=.;uid=sa;password=;database=yourDatabse;min pool size=4;" />
</appSettings>

</configuration> 


引用:
sqlConnection myCn=new SqlConnection(system.Configuration.ConfigurationSettings.AppSettings["myConn"]);

#4


可是你每个跟数据库交互的页面都要这样那不是频繁连接数据库了。
这样对数据库的性能也不好。不见的快吧。?
请指教。。

#5


连接字符串可以写在web.config里,然后用appsetting去连接的,这样代码可以简单一点,但还是得用一次连一次,不过我觉得这样可以保证数据库连接的稳定性.

#6


这个我知道的。我需要的不是如何写。我需要的是
为什么每次跟数据库交互都要连接。取数据。然后断开。
我觉的这样不好。。比如这个sqlConnection 的对象为什么不是一个持续连接的对象。
(争对那个用户。)而要反复的连接数据库。。

#7


其實很多辦法的
你可以寫在web.config裡面.也可以寫成xml或者ini放到對應的目錄下
執行的讀出來就可以了

#8


原来的Recordset主要在连接模式下运行。这就会导致多个数据库的锁定和活动的连接,
从而影响了应用程序的性能和可伸缩性。

现在,你应该看到.NET的优点之一了,
它可以离线编辑数据。

别的不说,至少你可以少向MS买几个SQL授权吧

#9


這個你也可以連接一次
如:
SqlConnection Conn =new SqlConnection("連接串");
SqlCommand Comm=new SqlCommand();
Comm.CommandText="insert.."
..
Comm.CommandText="Select * from ..."
...
Conn.Close();

#10


也许我没有说清楚。
我的意思不是那个connectionstring放再什么地方。
我的意思是connection对象为什么每次都要声明。。
每次都要open。取完数据之后马上要close;
如此反复。。
我以前没有做过网站。我需要的不是你们给我源码如何连接。(这个我会)
而是思想。。为什么要这么作。。
说个理由先。
因为我们以前作intranet的时候都是connection对象是一直连在上面的。直到那个
具体的用户退出整个应用程序。。
我想作网站也应该是这样的。(我是照搬的。没有道理请不要骂我。我是第一次)

#11


你可以在查询分析器中做个实验。

当你同时打开五个以上的活动连接时,将会对数据库的性能产生影响。
当到到10个以上的时候。。
嘿嘿,,,

你看看吧
一个简单的select * from yourtable
ctrl + k
ctrl + e
看一下执行规划你就可以知道花费CPU时间的变化了 

#12


请问各位大侠在公司用ado.net + asp.net + c# 开发网站也是每次都连接。
取出数据之后,然后再断开的吗。。

#13


其实dataAdapter是会自动调用
cn.open()

cn.close()

的,也就是说,
使用dataAdapter的时候
你不用显式调用这两个方法的

#14


我们做的企业内部网本来人就不多(没有几千几万的)。。
cpu也负担的起。所以一直连接的时候效率高。
是不是为了减轻 服务器对internet 访问的负担。所以才这样的。
我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的。
我又没有做过这方面的东西。
而看了一些asp.net + ado.net + c#的demo源程序发现跟他做的不一样。
所以才有此一问。。
另:一般一个贴应该发多少分。我是新来的。不知道给多给少。还请各位指教。

#15


我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的

那是因为原来的ADO中的Recordset就要求在连接模式下使用的
你不连接着还不行(除非你发大力气去改进)

分数吗
当然是越多越好^_^

#16


如果一直连接着数据库肯定要影响执行效率的,还是什么时候用什么连接,用完就关闭效率高!

#17


感谢

#18


>我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的

你的全局是什么意思?应用程序级别?还是页面级别?
如果是页面级别,不是什么大问题。你一个页面用一个cnn应该不会出什么大问题。
如果是 app级别的话,就不行了。a页面cnn.open 结果,b页面把它关了。然后 a知道么?

至于很多人 在一个页面内,用到数据库的时候就 new connection,也没什么不可以。(我也是这样,只不过我把这个过程封装在中间层,不需要做页面的人去考虑数据库连接问题。)至于效率嘛,不是什么大问题,.net有连接池管理。创建对象开销,可以忽略吧?毕竟是企业应用,真正消耗时间的 是在数据库。
  

#1


可以用一个全局connection对象

但不说,就不是不用连接多次了

因为你总不能连着不放吧

#2


一直连在上面不是个好主意,会出很多问题的~
如果你不想每次都写这个连接字符串,可以定义一个全局字符串常量,以后直接OPen一下就可以了。

#3


<configuration> 
<system.web>
........
</system.web>

<!--注意要放在<system.web>节点外-->
<appSettings>
        <add key="myConn" value="server=.;uid=sa;password=;database=yourDatabse;min pool size=4;" />
</appSettings>

</configuration> 


引用:
sqlConnection myCn=new SqlConnection(system.Configuration.ConfigurationSettings.AppSettings["myConn"]);

#4


可是你每个跟数据库交互的页面都要这样那不是频繁连接数据库了。
这样对数据库的性能也不好。不见的快吧。?
请指教。。

#5


连接字符串可以写在web.config里,然后用appsetting去连接的,这样代码可以简单一点,但还是得用一次连一次,不过我觉得这样可以保证数据库连接的稳定性.

#6


这个我知道的。我需要的不是如何写。我需要的是
为什么每次跟数据库交互都要连接。取数据。然后断开。
我觉的这样不好。。比如这个sqlConnection 的对象为什么不是一个持续连接的对象。
(争对那个用户。)而要反复的连接数据库。。

#7


其實很多辦法的
你可以寫在web.config裡面.也可以寫成xml或者ini放到對應的目錄下
執行的讀出來就可以了

#8


原来的Recordset主要在连接模式下运行。这就会导致多个数据库的锁定和活动的连接,
从而影响了应用程序的性能和可伸缩性。

现在,你应该看到.NET的优点之一了,
它可以离线编辑数据。

别的不说,至少你可以少向MS买几个SQL授权吧

#9


這個你也可以連接一次
如:
SqlConnection Conn =new SqlConnection("連接串");
SqlCommand Comm=new SqlCommand();
Comm.CommandText="insert.."
..
Comm.CommandText="Select * from ..."
...
Conn.Close();

#10


也许我没有说清楚。
我的意思不是那个connectionstring放再什么地方。
我的意思是connection对象为什么每次都要声明。。
每次都要open。取完数据之后马上要close;
如此反复。。
我以前没有做过网站。我需要的不是你们给我源码如何连接。(这个我会)
而是思想。。为什么要这么作。。
说个理由先。
因为我们以前作intranet的时候都是connection对象是一直连在上面的。直到那个
具体的用户退出整个应用程序。。
我想作网站也应该是这样的。(我是照搬的。没有道理请不要骂我。我是第一次)

#11


你可以在查询分析器中做个实验。

当你同时打开五个以上的活动连接时,将会对数据库的性能产生影响。
当到到10个以上的时候。。
嘿嘿,,,

你看看吧
一个简单的select * from yourtable
ctrl + k
ctrl + e
看一下执行规划你就可以知道花费CPU时间的变化了 

#12


请问各位大侠在公司用ado.net + asp.net + c# 开发网站也是每次都连接。
取出数据之后,然后再断开的吗。。

#13


其实dataAdapter是会自动调用
cn.open()

cn.close()

的,也就是说,
使用dataAdapter的时候
你不用显式调用这两个方法的

#14


我们做的企业内部网本来人就不多(没有几千几万的)。。
cpu也负担的起。所以一直连接的时候效率高。
是不是为了减轻 服务器对internet 访问的负担。所以才这样的。
我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的。
我又没有做过这方面的东西。
而看了一些asp.net + ado.net + c#的demo源程序发现跟他做的不一样。
所以才有此一问。。
另:一般一个贴应该发多少分。我是新来的。不知道给多给少。还请各位指教。

#15


我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的

那是因为原来的ADO中的Recordset就要求在连接模式下使用的
你不连接着还不行(除非你发大力气去改进)

分数吗
当然是越多越好^_^

#16


如果一直连接着数据库肯定要影响执行效率的,还是什么时候用什么连接,用完就关闭效率高!

#17


感谢

#18


>我朋友他们公司以前用asp + ado 做网站就是用一个全局connection对象的

你的全局是什么意思?应用程序级别?还是页面级别?
如果是页面级别,不是什么大问题。你一个页面用一个cnn应该不会出什么大问题。
如果是 app级别的话,就不行了。a页面cnn.open 结果,b页面把它关了。然后 a知道么?

至于很多人 在一个页面内,用到数据库的时候就 new connection,也没什么不可以。(我也是这样,只不过我把这个过程封装在中间层,不需要做页面的人去考虑数据库连接问题。)至于效率嘛,不是什么大问题,.net有连接池管理。创建对象开销,可以忽略吧?毕竟是企业应用,真正消耗时间的 是在数据库。