在C#里大家是如何共用一个连接的?
以下代码有什么区别?
方式一:
在类中:
public class Public
{
    public static SqlConnection Conn = new SqlConnection (System.Configuration.ConfigurationManager.AppSettings["ConnStr"].Trim ()) ;
....在其他页面是这样调用的
  SqlCommand cm = new SqlCommand(str_Sql, Public.Conn);
  ...
  Public.Conn.Close();
...方式二:
public class Public
{
    public static SqlConnection Conn = new SqlConnection (System.Configuration.ConfigurationManager.AppSettings["ConnStr"].Trim ()) ;
..
   public static SqlConnection MainConn
    {
        get
        {
            return Conn;
        }
    }
...
在其他页面是这样调用的
  SqlCommand cm = new SqlCommand(str_Sql, Public.MainConn);
...
  Public.MainConn.Close();按我的了解,方式一因为是静态调定义了Conn,如果在其他页面调用了,那当调用完关闭后,其他用户也在使用中的话,那么也数据也会被关闭。对于方式二,不知道会有会有问题呢?各位高手又是如何使用共用连接的?

解决方案 »

  1.   

    感觉方法2只是封装了那个静态的 SqlConnection Conn  ,程序不会初问题,
    不过好像有多余的感觉,用1的调用方法同样可以调用2的。
      

  2.   

    不建议你这么写..
    在类中需要的话,单独new一个SqlConnection出来就好了..不要用static..static会在系统中一直存在..并且你用static做变量,在webAPP中是会出现问题的...看看这个文章..http://lixianhuei.cnblogs.com/archive/2005/08/31/227274.aspx
      

  3.   

    对于SqlConnection的使用,我建议还是交给系统来维护..你每次使用一个SqlConnection后,该SqlConnection并不会销毁,而是返回到连接池中的..下次使用的时候,系统会从连接池中重新读取一个SqlConnection给你..而不是选择创建一个SqlConnection....当池中连接数达到最大之后,系统会让程序等待,如果等待超时则会报错..具体的连接池和SqlConnection,你可以看MSDN的解释..你会清楚很多..
      

  4.   

    不要使用static。每一次实例化SqlConnection的时候,使用同样的串(从配置文件中读出的就行),然后操作数据库完成后及时Close。asp.net自己会管理连接池,不需要画蛇添足地去自己重新开发“共享机制”。
      

  5.   

    在每个方法或每个类里声明并实例就行,就像这样:
    public table GetTable()
    {
    SqlConnection cn=new SqlConnection...
    ...
    ...
    }
    连接字符串可以使用静态变量共享.
      

  6.   

    这个是我经常用得,你看看
    <appSettings>
         <add key="ConnectionString" value="workstation id=MachineName;packet size=4096;user id=szum;data source=dbase;persist security info=True;initial catalog=dbname;password=password"/>
      </appSettings> public static DataSet SqlExecuteDataSet(string sSql,string TableName)
    {
    string connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
    using(SqlConnection sqlcon=new SqlConnection(connectionString))
    {
    try
    {
    SqlDataAdapter sqlAdp = new SqlDataAdapter(sSql,sqlcon);
    DataSet ds = new DataSet();
    sqlcon.Open();
    sqlAdp.Fill(ds,TableName);

    return ds;
    }
    catch(Exception ex)
    {
    ErrMsg = ex.Message.Replace("\n","");
    sqlcon.Close();
    return new DataSet();
    }
    }
    }
      

  7.   

    写个类,类中有连接数据库的方法!到每个页面上,只要在页面的Init事件中连接,在UnLoad事件中关闭,就可以了!