我的做法:生成 N 个 DataTable 放入 1 个 DataSet 中,然后关闭连接

解决方案 »

  1.   

    如果是你自己处理数据库连接,不用连接池,当然是用a;但是在有连接池支持的情况下,还是用B,因为这个时候代码中的“数据库连接close”只是连接被释放回池中。
      数据库连接是“很昂贵的资源”,建议使用完 Connection 后始终将其关闭,以便连接可以返回到池中。
      SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池。
      

  2.   

    B吧,前段时间有帖讨论。
    其实A是长期占用资源,而且不会释放资源。
    B,据说open/Close并不会太花费资源,原因是因为当一个连接open后是在连接池里做缓冲的。
    此时资源释放。如连接的时候才会调用,此时连接的所有其他的初始化东西已经完成。。请大哥们指点。
      

  3.   

    赞成bflovesnow() !为什么不把多个DataSet合并?一个DataSet可以装入多个DataTable,连接数据库一次就可以完成多有查询和更新操作。连接池是起事务的时候用的那个吧?(BeginTransaction和CommitTransaction???)
      

  4.   

    IceSheet() 说的对
    用完就要关
    只在第一次连接要耗点时间
    连接池满了要出错的
      

  5.   

    是不是应该这样,这样才符合断开式连接。连接数据库,填充一个DATASET,多个表。
    关闭数据库连接
    N个表操作
    连接数据库,进行更新
    关闭数据库连接。
      

  6.   

    看来
    A) VS  B)相当嘛继续请求经验程序员来分析
      

  7.   

    写一段程序来比较执行时间 int times = 10000;
    int start, end;
    int i;
    string tempstrCon="Provider=OraOLEDB.Oracle.1;Persist Security Info=False;"+
    "User ID=scott;Password=tiger;Data Source=dbflat";
    string strSQL="select * from dept";
    System.Data.OleDb.OleDbConnection myConn=new System.Data.OleDb.OleDbConnection(tempstrCon);

    start = System.Environment.TickCount;
    myConn.Open();
    for(i=0; i<times; i++)
    {
    DataSet mydt=new System.Data.DataSet();
    System.Data.OleDb.OleDbDataAdapter myCommand=new System.Data.OleDb.OleDbDataAdapter(strSQL,myConn);
    myCommand.Fill(mydt,"temp");
    }
    myConn.Close();
    end = System.Environment.TickCount;
    Console.WriteLine("Time1: " + (end-start)/1000.0 + "Seconds"); start = System.Environment.TickCount;
    for(i=0; i<times; i++)
    {
    myConn.Open();
    DataSet mydt=new System.Data.DataSet();
    System.Data.OleDb.OleDbDataAdapter myCommand=new System.Data.OleDb.OleDbDataAdapter(strSQL,myConn);
    myCommand.Fill(mydt,"temp");
    myConn.Close();
    }
    end = System.Environment.TickCount;
    Console.WriteLine("Time2: " + (end-start)/1000.0 + "Seconds");
    执行结果:
    当times = 100
    Time1: 0.511Seconds
    Time2: 0.751Seconds当times = 1000
    Time1: 4.717Seconds
    Time2: 6.249Seconds当times = 10000
    Time1: 45.475Seconds
    Time2: 49.882Seconds看来A效率高一点,不过相差不大。
      

  8.   

    可以使用一个Dataset,如果可以的话,不要再实例化。