Sql 类型为';的未处理异常;系统堆栈溢出异常';发生在mscorlib.dll中

Sql 类型为';的未处理异常;系统堆栈溢出异常';发生在mscorlib.dll中,sql,winforms,recursion,c#-3.0,Sql,Winforms,Recursion,C# 3.0,我使用递归,它有时毫无例外地工作。 在某些情况下,它会引发异常:- class BaseData { public string DbConnection = ConfigurationManager.ConnectionStrings["OLTPPOINTER_Connectionstring"].ConnectionString; public string DbConnection_Report = ConfigurationManager.ConnectionString

我使用递归,它有时毫无例外地工作。 在某些情况下,它会引发异常:-

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; }
    }

递归调用是否使抛出成为异常。如何处理它是的,递归意味着嵌套方法调用。太多的嵌套方法调用确实会引发
堆栈溢出
。您应该避免递归地打开多个连接。

避免多个连接意味着我是否应该在不关闭连接的情况下打开sql connection ONCE并在整个操作中使用。这取决于您在该递归部分中具体执行的操作。这是您的调用,您可以选择是暂时占用所有递归调用的连接,还是在每个递归调用中打开/关闭连接更好。代码现在毫无例外地工作……我已经放置了thread.sleep(3000)在每次调用之后,我调用递归函数。
   SqlConnection conn = new SqlConnection(DbConnection); 
                    or
   SqlDataAdapter adpt = new SqlDataAdapter(cmd);
   adpt.Fill(ds, "DataSet");
   CloseConnection(cmd.Connection);