一个C/S结构下,要提交动态生成的几千条记录到数据库,即一次循环insert几千条记录,有些慢,
想做成多线程异步提交,这样估计能快点。   请各位高手们指点!

解决方案 »

  1.   

    服务器将异步操作分为它的两个逻辑部分:从客户端获得输入并开始异步操作的部分,和将异步操作结果提供给客户端的部分。除了异步操作所需的输入外,第一个部分还获得将在异步操作完成时调用的 AsyncCallbackDelegate 对象。第一部分返回一个可等待的对象,该对象实现由客户端用来确定异步操作状态的 IAsyncResult 接口。服务器一般还使用它返回给客户端的可等待对象来维护与异步操作关联的任何状态。通过提供可等待的对象,客户端使用第二部分获取异步操作的结果。在开始异步操作时,客户端可以提供回调函数委托,也可以不提供。下面是客户端可用来完成异步操作的选项: 轮询返回的 IAsyncResult 对象以了解完成状态。 
    尝试过早完成操作,从而一直阻塞到操作完成时。 
    一直在 IAsyncResult 对象上等待。此选项和上一个选项之间的区别是客户端可以使用超时定期收回控制。 
    在回调函数例程内完成操作。 
      

  2.   

    class MyUpdate
    {
    MyUpdate(DataSet _ds,DataAdapter _da)
    {
         m_DataSet = _ds;
         m_DataAdapter = _da;
    }
    DataSet m_DataSet;
    DataAdapter m_DataAdapter;public void Start()
    {
       new Thread(new ThreadStart(Update)).Start();  
    }void Update()
    {
       m_DataAdapter.Update(m_DataSet);
       if (null != OnFinish)
       {
           OnFinish(this,null);
        }
    }public EventHandler OnFinish;
    }
      

  3.   

    楼上的华君,你说的方法是先把insert语句放到DataSet里面,然后一次提交吗?
    有例子吗?麻烦给贴一下,以便学习,谢谢!
      

  4.   

    可以用JasonHeung(拥有一切也不过就这样笑着哭) 的方法,但是注意DataSet的中Row的RowState,要insert就要让那行的RowState为Added
    其实这样也是一条一条插,在一般情况下在进行数据库操作的时候,大部分时间是用在了数据库连接上,所以,你可以打开一个连接后,用同一连接,不停的一条一条的插,等全插完了再关闭连接。你说的用线程也不错,可以不用等待插结束可以做别的事,但是多线程绝对是没必要的,因为多线程插到了数据库还是一条一条插!