日期:2014-05-18  浏览次数:20461 次

asp.net与sqlserver数据库连接管理问题
我对数据库的连接有两种方式
一种是连完就断,发起请求后在开新连接,如
public   class   ZqSql{
public     const   string   connstr   =   "Server=.;DataBase=northwind;UID=sa;PWD=zq ";
public   static   IDataReader   GetDataReader(string   sqlstr)
{
    SqlConnection   conn   =   new   SqlConnection(connstr);
conn.Open();
    SqlCommand   cmd   =   new   SqlCommand(sqlstr,conn);
    cmd.CommandType   =   CommandType.Text;
    return   cmd.ExecuteReader(CommandBehavior.CloseConnection);
}

using(DataTable   dt   =   ZqSql.GetDataTable( "select   *   from   employees "))
{
                      DataGrid1.DataSource   =   dt;
    DataGrid1.DataBind();
}
还有一种就是当发起一次请求读数据库是,开一个连接并一直处于连接状态,当再发起读数据库也用这个连接,除非这个连接被关闭或为null时,再开一个新连接
public   class   ZqSqlEx{
public     const   string   connstr   =   "Server=/;DataBase=pubs;UID=sa;PWD=zq ";
private   static   SqlConnection   conn;
private   static   SqlCommand           cmd;

public   static   IDataReader   GetDataReader(string   sqlstr)
{
      OpenConnection();
      cmd   =   new   SqlCommand(sqlstr,conn);
      cmd.CommandType   =   CommandType.Text;

      return   cmd.ExecuteReader();
}

private   static   void   OpenConnection(){
      if(conn   ==   null){
          conn   =   new   SqlConnection(connstr);
          conn.Open();
      }
      else{
      if(conn.State   ==   ConnectionState.Closed){
          conn.Open();
      }
}
}

      我的理解是数据库的连接是存在于web服务器与数据库服务器之间的,当采用第一种方案时,每当用户提交与数据库相关的请求,就开关一次连接;当采用第二种方案时,无论用户提交多少次都只开一个连接。
      请问各位那种方案更好,或则还有更好的连接方案请不吝赐教!!
      我发现当我第一次连接并关闭本次连接后,数据库中还有一个连接,将这个连接强行断掉后,再连的第一次就是一般网络错误,重连就好了,请问这是为什么?

------解决方案--------------------
web用第一种/win用第二种
------解决方案--------------------
我使用的是SQL 2000和VS2003 在对数据库操作的时候只存在2种``
就是连接模式和断开模式的``如果使用DataReader 就使用的是连接模式``因为DataReader 要求与数据库处于连接状态才能使用``,DataSet就是断开模式的从数据库里获取信息填充到DataSet里就行了```
------解决方案--------------------
当采用第一种方案时,每当用户提交与数据库相关的请求,就开关一次连接;
-----------------------------
这个正确


当采用第二种方案时,无论用户提交多少次都只开一个连接。
------------------------------------------
如果你的网站只有1个用户也正确,如果你的网站有多个用户就惨了,就会每个用户都站1个链接,并且不关闭,或者是所有用户都只有1个不关闭的链接,这个时候网站就等死了。


强烈建议使用第一种方法。数据库链接是很宝贵的资源,千万不能占着不放,用完就放要


我发现当我第一次连接并关闭本次连接后,数据库中还有一个连接,将这个连接强行断掉后,再连的第一次就是一般网络错误,重连就好了,请问这是为什么?
--------------------------------
网上搜索下连接池的概念看看
------解决方案--------------------
1连接用完关闭,这是很早就说了

还有一个,全完可以同时开两个连接,前提是一成立
------解决方案--------------------
如果你的网站只有1个用户也正确,如果你的网站有多个用户就惨了,就会每个用户都站1个链接,并且不关闭,或者是所有用户都只有1个不关闭的链接,这个时候网站就等死了