问大伙一个问题:
如果我在循环里有一个 filldataSet的方法,我并没有显式的Open,close数据库链接
请问这样的话 ,filldataset方法会不会在没个循环都open,close,如果是这样的话, 会不会影响效率 .

解决方案 »

  1.   

    如果循环的话建议
    conn.Open();
    for(int i=0;i<1000;i++)da.Fill(ds); 
    conn.Close();
    Fill方法自动维护conn状态会在使用前开启使用后关闭
    而如果使用前conn已经开启的话使用后Fill方法会维持开启状态
      

  2.   

    不会的
    你可以在循环前,OPEN
    在循环后CLOSE
    这样就安全了,不用担心喽
      

  3.   

    如果我循环外面没有显式的open,close, 每个循环都会OPEN,Close?
    这样太影响效率了.
      

  4.   

    其實你在直行
    SqlDataAdapter oDA = new SqlDataAdapter(sCmd, conn);
    oDA.Fill(oDDDD,"do");
    類似的操作的時候
    他的連結是OPEN的
    取出資料以後他又會把它CLOSE 為了安全.
    這個是.NET 裡面FILL方法的內部代碼
     IDbConnection connection1 = DbDataAdapter.GetConnection(command, "Fill");
          ConnectionState state1 = ConnectionState.Open;
          if (MissingSchemaAction.AddWithKey == base.MissingSchemaAction)
          {
                behavior |= CommandBehavior.KeyInfo;
          }
          int num1 = 0;
          try
          {
                try
                {
                      DbDataAdapter.QuietOpen(connection1, out state1);
                      using (IDataReader reader1 = command.ExecuteReader(behavior | CommandBehavior.SequentialAccess))
                      {
                            if (data is DataTable)
                            {
                                  return this.Fill((DataTable) data, reader1);
                            }
                            return this.Fill((DataSet) data, srcTable, reader1, startRecord, maxRecords);
                      }
                }
                finally
                {
                      DbDataAdapter.QuietClose(connection1, state1);
                }
          }
          catch
          {
                throw;
          }
          return num1;
      

  5.   

    会自动open close,不过由于有connection pool,不用担心性能问题
      

  6.   

    所以最好避免循環讀取數據.因為連結數據庫是很耗時的操做,而且oDA.Fill是獨立操做.