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

解决方案 »

  1.   

    我使用的是SQL 2000和VS2003 在对数据库操作的时候只存在2种``
    就是连接模式和断开模式的``如果使用DataReader 就使用的是连接模式``因为DataReader 要求与数据库处于连接状态才能使用``,DataSet就是断开模式的从数据库里获取信息填充到DataSet里就行了```
      

  2.   

    如果你的网站只有1个用户也正确,如果你的网站有多个用户就惨了,就会每个用户都站1个链接,并且不关闭,或者是所有用户都只有1个不关闭的链接,这个时候网站就等死了
    ---------------------------------------------------------------------------------
    我来补充点,如果lz是搞web开发,上面的建议就非常重要了!!