1。请问调用一次ExecuteSP()的时候,是不是和数据库建立一次连接(oledbconnection),还是再程序中多次调用ExecuteSP()只打开一个数据库连接??2。数据库连接oledbconnection再这儿为何没有关闭那?private string GetConnectString() 

{ string myConnectStr="Provider=MSDAORA.1;User ID=mall;Data          Source=mall;Password=mall";

return myConnectStr;
}
//' DataAccess.CreateCommand()
// Creates a command object from a SQL string parameters, and the command type.
public OleDbCommand   CreateCommand(string SQLText, OleDbParameter[] Param, CommandType SQLCmdType)
{
OleDbConnection  myConnection= new OleDbConnection (GetConnectString());

OleDbCommand     myCommand = new OleDbCommand  (SQLText, myConnection);
myCommand.CommandType = SQLCmdType;
if (Param!=null) 
{
   foreach (OleDbParameter  ParamTemp in Param)
{
myCommand.Parameters.Add(ParamTemp);
}
}
try
{
  myConnection.Open();
   return myCommand;
}       catch (Exception e)
      {
LogError(e);
}
        return null;
}

//' DataAccess.ExecuteSP()
// Executes a stored procedure with parameters.Fills a DataTable object, returns True if success.
public  bool ExecuteSP(string SProcName, OleDbParameter[] Param, DataSet MyDataSet)
{
  OleDbCommand  myCommand= CreateCommand(SProcName, Param, CommandType.StoredProcedure);
  OleDbDataAdapter   myDataAdapter = new OleDbDataAdapter (myCommand); try
{
myDataAdapter.Fill(MyDataSet);
return true;
}
catch (Exception e)
{
LogError(e);
return false;
}
}

解决方案 »

  1.   

    1 最好每次打开的时候都新建连接
    2 没有关闭是错误的或者说这儿根本不需要打开,SqlDataAdapter自己Fill的时候会打开数据库
      

  2.   

    我得意思是别的程序多次调用ExecuteSP()时。OleDbConnection  myConnection是不是因为是私有变量,只连接一次?
      

  3.   

    自己解决了,加了个  finally
    {
    myConnection.Close();
    }
    能不能给自己加分呀?或者都来顶,来着给分。
      

  4.   

    晕,都说了
    这段程序根本就不需要打开,所以也不需要关闭

    public OleDbCommand   CreateCommand(string SQLText, OleDbParameter[] Param, CommandType SQLCmdType)
    {
    OleDbConnection  myConnection= new OleDbConnection (GetConnectString());OleDbCommand     myCommand = new OleDbCommand  (SQLText, myConnection);
    myCommand.CommandType = SQLCmdType;
    if (Param!=null) 
    {
       foreach (OleDbParameter  ParamTemp in Param)
    {
    myCommand.Parameters.Add(ParamTemp);
    }
    }
    try
    {
      myConnection.Open();
       return myCommand;
    }       catch (Exception e)
          {
    LogError(e);
    }
            return null;
    }
    改为
    SQLCmdType)
    {
    OleDbConnection  myConnection= new OleDbConnection (GetConnectString());OleDbCommand     myCommand = new OleDbCommand  (SQLText, myConnection);
    myCommand.CommandType = SQLCmdType;
    if (Param!=null) 
    {
       foreach (OleDbParameter  ParamTemp in Param)
    {
    myCommand.Parameters.Add(ParamTemp);
    }
    }   return myCommand;
    }
    是最好的解决方法