各位大侠,我用SQL2005数据库,用C#写个小程序,有两个数据库,A1,A2,其中A1有50张表,A2有210张表,A1的50张表包含在A2中,即A2中也有与A1相同结构的50张表。现在A1的50张表中有上百万条数据,A2中相对的50张表用truncate table清空,然后将A1的50张表的数据逐表插入到A2的50张表中,运行一段时间后,提示“运行超时”,A1中仅有一张表的数据插入到A2的相对表中。有人说分段插入,可是还是不行,有一张表数据就达90多万条,单独插入时还是提示“运行超时”。问下高手,这样情况如何解决呢?

解决方案 »

  1.   

    把超时时间设长 SQL菜单——》工具——》选项  查询超时 选项 改为0。
    但总归不是办法
      

  2.   

    在其他仅安装SQL客户端的机器上也能正常使用的办法
      

  3.   

    做到导入导出数据包吧 ssis执行包。。程序调用
      

  4.   

    貌似 不行  IP 是动态的。。插入的时候建议 不要这张表进行操作才90W 就超时? 我用的2008 速度很快啊。
      

  5.   

    SqlCommand类的默认超时是30秒,你需要修改那个CommandTimeout属性才行。
    另外如果你是数据库直接可以直接访问的话,通过链接服务器来操作会更好,直接在数据库里面执行了。
      

  6.   

    sqlbulkcopy 好像是叫这个名字,每秒大概1万多插入.
      

  7.   

    一个服务器,两个库的两张表间,可以用吗,是不是只要建立两个连接,database不同就可以了,麻烦您提供些源码,可以吗?谢谢
      

  8.   

    在一个服务器上就用sql导出数据这个比较快
      

  9.   

    没看见有什么处理, 为什么不直接Job传输?
      

  10.   

    高手们,写了个方法,如下:
    public void copydata1( string tablename1)
            {
        string cString = "user id=sa;password=123;initial catalog=master;data source=(local);database=A1;connect Timeout=3600;";
                string c_String = "user id=sa;password=123;initial catalog=master;data source=(local);database=A2;connect Timeout=3600;";
                using (SqlConnection conn = new SqlConnection(cString))
                {
                    conn.Open();
                    SqlCommand comm = new SqlCommand("SELECT * FROM A.dbo."+tablename1, conn);
                    SqlDataReader reader = comm.ExecuteReader();
                    using (SqlConnection conn2 = new SqlConnection(c_String))
                {
                    conn2.Open();
                using (SqlBulkCopy bcp = new SqlBulkCopy(conn2))
                    {
                    bcp.DestinationTableName = "A2.dbo."+tablename1;
                    bcp.BulkCopyTimeout = 5000;
                    try 
                        {
                            bcp.WriteToServer(reader);
                        }
                    catch (Exception ex) 
                        {
                            Console.WriteLine(ex.Message);
                        }
                    finally
                        {
                            reader.Close();
                        }
                    }
                } 
             } 
          }
    加入参数执行少量数据可以,大量数据,超过50万左右还是提示超时。各位高手,急待解决呀?
      

  11.   

    你两个库,都在同一台机器上,为什么不直接使用 sql 的导入与导出呢,
    非要用代码来实现
      

  12.   

    每天都執行truncate table?然后再插入???
      

  13.   

    用SQLDBCOPY对象,设定好timeout超时间隔!这样没问题的。
      

  14.   

    安装的只是SQL客户端,所以不能用SQL的导入导出,就写编码了
      

  15.   

    设定了timeout=5000,也就复制20万条左右的数据后,再复制另一张80万条的表,就提示超时了,有点晕,高手们,有没有解决办法?
      

  16.   

    导入导出工具不能用???
    toll\bin 下的dtswiz.exe直接搞定
      

  17.   

    怎么分段?具体流程是这样的:原库A1->接收数据->导入A2->清空A1(此操作循环几十或上百次后),A1保持空,然后A2->A1->删除A2.  每次用库A1接收一次数据时都清空一次,所以建立一个A2库,把每次接收的数据都复制到A2中,当几十数据接收后,A1保持为空,A2为收到的几十次的数据总数,然后再将A2库中的数据导入A1中,再将A2删除,这时A2中有200万左右的数据,具体如何分段,高手们,请解释一下。
      

  18.   

    不是每天都做的话,toll\bin 下的dtswiz.exe文件拷过来就可以直接用较什么劲
      

  19.   

    写代码的话你必须用存储过程,建索引效率差的不止一点。想在代码中sqlcommand搞定。不用想啦。
    我测过800m的文本,存储过程+索引 比纯sql代码效率快很多
      

  20.   

    没找到你说的文件,你有的话给我发来一个,谢谢,[email protected]
      

  21.   

    2005取消了这个工具,所以在05目录下是没有的。sqlserver2000下有的。我给你发了哈看下吧。}
    希望你顺利哈
      

  22.   

    提示缺少dtswiz.dll文件,下载一个后,也不能应用,我还是想问一下,分段该怎么写
      

  23.   

    如果如楼主所说的情况建议做如下分析
    1、是否需要实时转换(需求有这个必要吗?)
    2、能否转换需求为其它方式再有就是如果非要这么做建议让SQL自己去做,也就是说C#去调用一个存储过程,然后让存储过程去做
    再有就是SQL制定任务,让SQL定时去处理数据,不要自己写代码处理
      

  24.   

    sqlbulkcopy  用这个吧,以流的方式插入,很快的
      

  25.   

    我用了SQLBULLCOPY,代码已经贴上,可是插入20几条数据后,出现超时提示?楼上,具体代码如何呢?
    我用了BCP,在CMD下调用,可用,但在WINFORM下调用时,无反应,上网上也找了很多解决办法,至今未果。哎!!!!
      

  26.   

    打个补丁。
    参考下面的
    http://hi.baidu.com/hao_2468/item/f3203cd1d28349392b35c732
      

  27.   

    谢谢各位高手们的热心,自己用BCP解决了,不过速度稍慢些。
      

  28.   

    08版的DTSWizard.exe都还有阿,可能你用Express版的话没有这个工具