winfrom 多线程调ACCESS数据库
我在一个项目开了三个线程,运行后这三个线程挂起,当从串口接到数据后判定数据类型然后恢复相应的线程,线程调用连接ACCESS数据操作,第一次正常,以后就不能  OPEN  ACCESS连接,提示当前连接未关闭;我整个过程中恢复了这一个线程
下面是部分代码,请高手分析分析我触发的是 Lift_Init_Thread() 参数初始化线程 public static Thread ListMonitor_thread = new Thread(new ThreadStart(ListMonitor_Thread));//列表监控线程
 public static Thread FaultDeal_thread = new Thread(new ThreadStart(FaultDeal_Thread));//故障数据处理线程
 public static Thread Lift_Init_thread = new Thread(new ThreadStart(Lift_Init_Thread));//参数初始化线程 public static void Lift_Init_Thread()//参数初始化线程
       {
            string dat = "";
            while (true)
            {
                dat = Lift_Init_Data;
                if (dat != "")
                {
                    string datS = "select count(*) from Lift_Init_Massages where lift='L1'";
                    datS = LinkToAccess.Link_base_reade_count(datS);
                    MessageBox.Show(datS);
                 }
                Lift_Init_thread.Suspend();     //线程挂起
            }
        }       public static void ListMonitor_Thread()//列表监控线程
        {
            string dat = "";
            while (true)
            {
                dat = LMdata;
                if (dat != oldLMdata && dat.Trim() != "")
                {
                    ;              
                }
                ListMonitor_thread.Suspend();   //挂起线程
            }
        }                public static void FaultDeal_Thread()//故障数据处理线程
        {
            string dat = "";
            while (true)
            {
                dat = Fault_Data;
                if (dat != "")
                {
                    ;
                }
                FaultDeal_thread.Suspend();  //挂起线程
            }
        }      public static string Link_base_reade_count(string select)//数据读取
        {
            string back = "";
            lock (back)
            {
                try
                {
                    LINK.Open();//打开连接                 
                    OleDbCommand comd = new OleDbCommand(select, LINK);
                    back = comd.ExecuteScalar().ToString();                    
                }
                catch (Exception ee)//抛出异常
                {                   
                    back = "连接失败\r\n" + ee;
                }
                finally
                {
                    LINK.Close();
                }
            }
            return back;
        }

解决方案 »

  1.   

    不要有多个线程同时操作一个access数据,它承受不了这么大的力。
      

  2.   

    结果出现这种提示试图释放正在使用的 RCW。活动线程或其他线程上正在使用该 RCW。释放正在使用的 RCW 的尝试会导致损坏或数据丢失。这是什么原因呀
      

  3.   

    ACCESS 本身并不支持大访问量和高并发
    ACCESS 不能同时有超过一个的连接,
    线程要打开数据库时,必须关掉数据库,否则只有等待数据库被关闭 
    BeginInvoke操作
      

  4.   

    连接ACCESS进行同步处理一下!
    在一个时间段,只允许一个线程连接