要求测试条件是:C#+winform+Access数据库,求向一个表中插入10000条记录所用的时间。我的目的是录求一个优化的目标,因为在我的系统里竟跑了10分钟才执行完成,被客户骂晕了。所以请有用符合我的测试条件做过序程序的朋友帮忙测试下提供点数据,跪谢了。
另外要说明:未经测试的数据千万别发上来呀,别害人啊。。

解决方案 »

  1.   

    表的结构大概是:
    RecId  自动编号       主键
    BillId nvarchar(20)   外键
    ProId  nvarchar(20)   外键
    Qty    int
    Price  Money
    Unit   nvarchar(10)
    Re nvarchar(200)至于数据来源,执行插入操作时已全部存到内存里,我的具体做法是先把所有明细记录存在一个集合里:List<BillDetails>,等所有明细录入完毕再循环一条记录一条记录保存,我要的就是在List<BillDetails>已经有了一万条记录后点击保存按钮开始保存到保存完成所需要的时间。
      

  2.   

    刚刚Google了一下,有篇文章说存12000条记录用了23秒还歉慢,说java只需要9秒
    大家说说有这么牛吗?达不到啊。
      

  3.   


    你应该循环拼接一个StringBuilder,然后一次性执行:cmd.CommandType = CommandType.Text;
    cmd.CommandText = stringBuilder;
    cmd.ExecuteNonQuery();
      

  4.   

    用的是access的啊。
     拼接一个StringBuilder,然后一次性执行,这样可以吗??
    access支持这样的吗?
      

  5.   


    将cmd.CommandText属性的值设置为一堆sql语句,一次性执行。
    我在sql server里面试验过,你用Access试试吧。
      

  6.   

    12000条8秒
    下面是测试代码,表结构与楼主相同            DateTime b = DateTime.Now;            OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=D:\My Documents\db2.Mdb;";
                conn.Open();            OleDbTransaction trans = conn.BeginTransaction();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = trans;
                string sql = string.Empty;            for ( int i = 0; i <= 12000; i++ )
                {
                    sql = string.Format( "insert into ttt (BillId,ProId,Qty,Price,Unit,Re) values ('{0}','{1}',{2},{3},'{4}','{5}')"
                        , "Billid" + i.ToString()
                        , "ProId" + i.ToString()
                        , i
                        , i * 0.258
                        , "U" + i.ToString()
                        , "Re" + i.ToString()
                        );
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }            trans.Commit();
                conn.Close();            DateTime ee = DateTime.Now;
                Console.WriteLine( b );
                Console.WriteLine( ee );
    不知道楼主的代码是如果实现的
    下面给出一些建议
    1、采用长链接,即所有数据采用一个链接来处理
    2、启动事务
    3、从楼主的描述来看,可能采用了实体类,那么应该是使用类似三层的架构,通过DBHELP来处理数据的
    这样即使启用了事务之类的,一个一个地循环传进去也会降低效率
    可以考虑在SQL层增加一个重载,接收实体类数组或集合来保存
    4、将ACCESS数据库用ACCESS打开,用工具菜单中的功能 ,将数据库压缩修复一下