请问在一个页面中只连接一次数据库,该怎么做?谢谢!

windy_wzh 2005-07-05 11:58:45
比如,我想在page_load中连接一次数据库后,再其他事件中就不需再连接,可我这样写:

public void Page_Load(object sender, System.EventArgs e)
{

//连接数据库
string str = ConfigurationSettings.AppSettings["DBConnectStringForHT"];
SqlConnection conn = new SqlConnection(str);
conn.Open();
}

再其他事件或函数中打开数据库:

public int TemCount(int TemLevel,int TemKind)
{
int Ccount = 0;
string countSql = "select count(*) from DB_Template where TemLevel="+TemLevel +" and TemKind = " + TemKind;

SqlCommand Ccomm = new SqlCommand(countSql,conn);
SqlDataReader Crd = Ccomm.ExecuteReader();

...
}

这样就会提示出错,没有conn,请问要怎样才能实现连接一次数据库后,就可以直接调用,而不需重新再连接了,谢谢!

...全文
174 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj_198119811981 2005-07-06
  • 打赏
  • 举报
回复
将conn在page_load之外定义,作为公共变量就可以了。
herony420 2005-07-05
  • 打赏
  • 举报
回复
SqlConnection conn = null;
string str="";

public void Page_Load(object sender, System.EventArgs e)
{

//连接数据库
str = ConfigurationSettings.AppSettings["DBConnectStringForHT"];
conn = new SqlConnection(str);
conn.Open();
}
在什么时候关闭呢?
页面关闭的时候断开连接

不过,微软强烈建议连接在使用的时候再打开,使用完成后马上关闭,由于连接池的使用,虽然在代码里关闭了连接,其实是防入了连接池,这样连接并不会占用很多的资源
cdo 2005-07-05
  • 打赏
  • 举报
回复
而且conn.open()应该放在try里面.

最好先找些代码看看.
lyb_abiandbel 2005-07-05
  • 打赏
  • 举报
回复
如果是web,在web.config里面可以写的。
如果是winform,一楼可以!
cdo 2005-07-05
  • 打赏
  • 举报
回复
public void Page_Load(object sender, System.EventArgs e)
{

//连接数据库
string str = ConfigurationSettings.AppSettings["DBConnectStringForHT"];
SqlConnection conn = new SqlConnection(str);
conn.Open();
}

conn的生命域在这里已经结束了.你应该定义一个成员用来保存conn.
xataxnova 2005-07-05
  • 打赏
  • 举报
回复
虽然Page_Load 函数被设为公有,但是conn的生命周期还是会在Page_Load 执行后结束。
因此在其他函数中调用conn依然会出错。
如果图省事的话我通常会这样写:
ptivate string conStr="连接语句";
private void CONN(string CmdStr)//CmdStr为命令string
{
SqlConnection conn = new SqlConnection(conStr);
SqlCommand cmd=new SqlCommand(CmdStr,conn);

try
{
conn.Open();
//blar,blar,blar
conn.Close();
{
catch(Exception ex)
{
MesssageBox.Show("Error:"+ex.Message);
//deal with it
}
finally
{
//some thing must be done
}
}
这样每次只需要把命令作为参数传进去就行了。
另外,连接以后如果没有操作,默认15秒以后就会Time out,连接自动断开。
这样的话,用DataSet 会比较好,DataSet把数据读到内存中,直到执行UpDate才把数据更新到数据库,但是这样做比较耗内存。

在下学C#也不到两个月,写得不好,见笑了。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧