2014-09-09 3 views
0
class BaseData 
{ 
    public string DbConnection = ConfigurationManager.ConnectionStrings["OLTPPOINTER_Connectionstring"].ConnectionString; 
    public string DbConnection_Report = ConfigurationManager.ConnectionStrings["OLTPPOINTER_Connectionstring"].ConnectionString; 

    protected SqlConnection OpenConnection() 
    { 
     **SqlConnection conn = new SqlConnection(DbConnection);**----"StackOverflow Exception was unhandled" 

     try 
     { 
      if (conn.State != ConnectionState.Open) 
      { 
       conn.Open(); 
      } 

      return conn; 
     } 
     catch { throw; } 
    } 

예외를 사용하지 않고 언젠가는 재귀를 사용합니다. 은 어떤 경우에는 예외가 발생합니다 : -mscorlib.dll에서 '시스템 스택 오버플로 예외'유형의 처리되지 않은 예외가 발생했습니다.

SqlConnection conn = new SqlConnection(DbConnection); 
        or 
    SqlDataAdapter adpt = new SqlDataAdapter(cmd); 
    adpt.Fill(ds, "DataSet"); 
    CloseConnection(cmd.Connection); 

는 재귀 호출은 던져 Exception.How 그것이

답변

0

예, 재귀가 중첩 된 메소드 호출을 의미 처리 할 수 ​​없습니다. 너무 많은 중첩 된 메소드 호출은 실제로 StackOverflow을 던집니다. 그리고 재귀 적으로 여러 연결을 열지 않아야합니다.

+0

다중 연결을 피하십시오. 의미 - 연결 연결을 닫지 않고 작업을 통해 사용해야합니다. –

+0

정확히 재귀 부분에서 수행중인 작업에 따라 달라집니다. 이것은 모든 재귀 호출의 당분간 연결을 연결하거나 각 재귀 호출 내에서 연결을 열거 나 닫는 것이 더 나은지 선택하는 호출입니다. –

+0

코드가 Exception없이 작동 중입니다 ..... 매번 thread.sleep (3000)을 넣은 후 재귀 함수를 호출합니다. –

관련 문제