我要在很多地方用到一个相同的数据库连接 
是不是可以做一个静态的Connection,所有方法共享一个连接
这样是不是存在一个并发的问题部分讨论内容见
http://community.csdn.net/Expert/topic/4869/4869905.xml?temp=8.684939E-02

解决方案 »

  1.   

    肯定会有并发问题你只能在一个线程里面共享(其实不应该叫共享)conection对象ASP.NET的一个线程就是一个WebForm页面,所以你只应该写成Page类的成员变量,不应该写成静态变量。
      

  2.   

    OleDbConnection 类
    线程安全
    此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。对于什么是线程安全,MSDN应该有具体的介绍.
    连接文章最后测试也不正确,在单线程下是没问题,在多线程下存在锁的问题;锁降低访问效率.
    有一百个人排队买票,你说一个售票窗口快还是多个票窗口快.
      

  3.   


            public static TEMP GetByID(System.Int32 fa)
            {
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [TEMP] WHERE [a] = @ID", Application.ConnectionString);
                OleDbParameter parID = cmd.Parameters.Add("@ID", OleDbType.Integer);
                parID.Value = fa;
                OleDbDataReader reader = null;
                try
                {
                    reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
                    cmd.Connection.Close();
                }
                catch (Exception ex)
                {
                    cmd.Connection.Close();
                    cmd.Dispose();
                    throw ex;
                }
                if (!reader.HasRows)
                {
                    cmd.Dispose();
                    return null;
                }
                else
                {
                    reader.Read();
                }
                TEMP tEMP = CreateByRow(reader);
                reader.Close();
                reader.Dispose();
                cmd.Dispose();
                return tEMP;
            }
    那大哥们帮看一下
    上一段代码的错误处理该咋改哟
      

  4.   

    楼主的代码能运行正常?
    Connection.Close()后还能reader.Read()?
    先保证代码运行没问题的情况,再去考虑重构.
    没有必要太在代码写得不好,关键是自己愿意去重构.
      

  5.   

    我觉得并发问题肯定会出现!支持henryfan1(http://henryfan.cnblogs.com) ( ) 信誉:69的意见!