这几种ASP.NET连数据库的方式,哪种是对的呢?疑惑中... 不是道有没有标准答案
1. 每执行一条SQL语句,连接一次:
conn.Open() conn.execute conn.Close()
2. 每张网页连接一次:
PageLoad()里 conn.Open()
然后执行多条SQL语句
PageUnLoad()里 conn.Close() ... (有这个PageUnLoad()函数吗?)
3. 每个网站连接一次:
Application_Start()里:conn.Open(),并把这个conn只存在Application变量里。
各个网页各个执行SQL语句的地方:Application("conn").Execute(SQL);
Application_End()里:conn.Close()
问题点数:100、回复次数:12Top
1 楼freecs(北狼)回复于 2003-08-04 13:52:23 得分 10
第一种是正确的
每一次数据库操作就 打开一次, 然后使用,用完后立刻关闭Top
2 楼dh_98(逗号)回复于 2003-08-04 13:55:14 得分 0
有没有什么理由呢? 我按照第二种做,感觉好像也是可以的。Top
3 楼xu0007()回复于 2003-08-04 13:56:18 得分 10
如果能每张网页只连接一次的话,还是2好,尽量少的打开数据库,但打开后要记得关!Top
4 楼xu0007()回复于 2003-08-04 13:58:01 得分 10
数据库每次打开都需要资源和时间的。所以在不影响功能的情况下尽量少打开为妙!Top
5 楼houbinbin()回复于 2003-08-04 13:58:35 得分 0
建议采用第一种方式操作。
理由如下:
1、每次操作之前建立连接,保证在操作时连接的有效性,提高可靠性。
2、操作完马上关闭,便于释放资源,提高系统性能。
3、采用Application变量会站用系统资源。Top
6 楼panyee(快乐王子)回复于 2003-08-04 14:00:24 得分 20
你的几种方式实现起来都不算错误
但从效率和安全性上考虑,第一和第二种会比较合适, 第三种不太好
看你页面要做的sql操作的多少, 决定用哪一种方式省资源又安全Top
7 楼dh_98(逗号)回复于 2003-08-04 14:04:04 得分 0
Oh,Yes. 那我按照第二种,现在有一个问题:
我有一个数据库操作的类:
public class DatabaseWork
{
SqlConnection conn;
public DatabaseWork() // 构造函数
{
conn = new SqlConnection("....");
conn.Open();
}
public DataSet ListUser(string UserName)
{
DataSet ds;
conn.execute ....
return ds;
}
public DataSet ListComment(string UserName)
{
DataSet ds;
conn.execute ....
return ds;
}
}
在网页中用的时候:
DatabaseWork db= new DatabaseWork();
DataSet ds=db.ListUser("abc");
DataSet ds2=db.ListComment("abc");
是可以的,但操作多了,就会报那个“池连接错误”,意思是Conn没有Close();
我的问题是,应该在哪里写conn.Close()呢?Top
8 楼shixueli(我们总是不能随心所欲)回复于 2003-08-04 14:07:58 得分 15
好的方法应该是在pageload里面打开,
在PreRender里面关闭,因为用户触发一个比如说click事件之后,可能pageload要用连接,在click事件处理代码里面也用到,这样就会浪费掉一个open。
而PreRender事件是在页面呈现给用户之前执行最后一个事件,不管怎么样pageload和prerender总是要执行的Top
9 楼shixueli(我们总是不能随心所欲)回复于 2003-08-04 14:09:20 得分 10
用dataset之前必须把连接关闭,因为dataset不需要Top
10 楼shixueli(我们总是不能随心所欲)回复于 2003-08-04 14:12:31 得分 0
又说错了,是SqlDataAdapter,不是DataSetTop
11 楼weki(小李)回复于 2003-08-04 14:13:40 得分 15
在每个:
public DataSet ListComment(string UserName)
{
conn.Open()
//执行内容
conn.Close()
}
我一般是这样做的.
然后在在要使用 ListComment()的时候就调用一下。
Top
12 楼shixueli(我们总是不能随心所欲)回复于 2003-08-04 14:30:59 得分 10
第二中方法也有一个弊端,就是如果在比如说一个button的click事件里面处理代码很多,又是与数据库操作无关的,在执行这段代码的时候,数据库连接是开着的,
这就浪费了:)
--Top




