本帖最后由 wangfan12580 于 2011-06-07 14:05:18 编辑

解决方案 »

  1.   

    我这边程序需要同时开启300个左右的线程从数据库A读取数据并写入数据到XML,然后读取XML数据再写入到数据库B中,我这读写数据库的代码部分加上Lock能不能解决这个问题?
    如:lock (this)
                    {
                        using (OleDbConnection conn = new OleDbConnection(connectionString))
                        {
                            OleDbDataAdapter oleddbDA = new OleDbDataAdapter(sqlStr, conn);
                            DataSet ds = new DataSet();
                            oleddbDA.Fill(ds);
                            conn.Open();
                            MESTrace.Trace("Execute SQL: " + sqlStr);
                            if (ds.Tables.Count > 0)
                                dt = ds.Tables[0];
                            MESTrace.Trace(sqlStr + " Return " + dt.Rows.Count);                        oleddbDA.Dispose();
                            conn.Dispose();
                            conn.Close();
                        }
                        return dt;
                    }急求大侠帮忙
      

  2.   

    每次访问数据库都是一个新的DAL实例?
    那你lock(this) 有什么用,锁定自身?定义一个私有静态变量private static  object lockobj=new object();lock(this) => lock(lockobj)
      

  3.   

    对于不同对象,锁定的标志对象(也就是上面的lockobj)相对于它们要是同一个,这样才能保证不会同一时间多个对象执行该代码段
      

  4.   


    同时开启300个左右的线程读写数据库、读写XML文件,如果不lock的话
    错误1:不能打开数据库##。应用程序可能无法识别该数据库,或文件可能损坏错误2:尝试打开的数据库已经被机器 #WMCCN# 上的用户 #Admin# 以排它的方式打开。当数据库可使用后请再试一次错误3:文件“XX”不能使用上述几个数据库、XML文件读写错误可以如何避免?
      

  5.   

     这哥们应该可以  线程同步 使用lock锁住共同调用的方法每次线程调用这方法 只有一个个的去调用
      

  6.   

    lock的应该是一个静态的属性或对象。
    不过弱弱地问句,300个线程,会差吗??????没试过。。
      

  7.   

    你掩盖了一个实情,你使用什么数据库?是Jet(Access)?
      

  8.   

    如果是Jet,那么很自然。多用户访问Jet数据库文件,假设有一个连接没有关闭就断开了,数据库立刻就“坏了”,需要使用Access的文件修复工具修复了才能继续使用(但是此时往往也随机丢失了一个或者多个数据块中的多条数据记录)。Access使用的是很低级的多用户加锁模式,就是这个德行。
      

  9.   


    数据导出端:GE Historian实时历史数据库,提供OLEDB接口中间:XML存储Mapping配置文件及临时数据存储    导出数据到——XML——读取数据到SQLServer、Oracle数据写入端:SQL2005本机测试,最终部署使用Oracle 10.2.0.3
      

  10.   

    补充一点:我的所有线程读取同一个表,但是不会同时读取同一条记录,读取的目标库是GE Historian实时历史数据库读取的时候经常不定时出现:不能打开数据库##。应用程序可能无法识别该数据库,或文件可能损坏
    的错误,后面抛出的异常显示就是select数据库GE Historian中表时的错误有大侠熟悉GE Historian数据库的否?