Исключение StackOverflowException в SqlDataAdapter.Fill () не обрабатывается - PullRequest
0 голосов
/ 10 января 2012

Исключение StackOverflowException не обработано. Мне нужна помощь в этом. Я получаю сообщение об ошибке

adp.Fill(ds)

Также я не уверен, почему, но я не могу удалить throw, он говорит, что не все коды возвращают значение.

    string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["dbCustConn"].ToString();
    string cmdStr = "Select * from MainDB";

    public DAL() // default parameter.  Use?
    {
    }

        public DataTable Load() // what is this for? (loads all the records from the database)
        {
            SqlConnection conn = new SqlConnection(connStr);
            //SqlCommand cmd = new SqlCommand(cmdStr, connStr);
            SqlDataAdapter adp = new SqlDataAdapter(cmdStr, connStr);  // SqlDataAdapater?  Load all?
            DataSet ds = new DataSet();
            try
            {
                adp.Fill(ds);
                return ds.Tables[0];
            }
            catch
            {
                throw;
            }
            finally
            {
                ds.Dispose();
                adp.Dispose();
                conn.Close();
                conn.Dispose();
            }
        }

        public DataTable Load() // what is this for? (loads all the records from the database)
        {
            SqlDataAdapter adp = new SqlDataAdapter(cmdStr, connStr);  // SqlDataAdapater?  Load all?
            DataSet ds = new DataSet();
            using(SqlConnection conn = new SqlConnection(connStr))
            {
                adp.Fill(ds);
                return ds.Tables[0];
            }
        }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGrid();
        }
    }

    private void BindGrid()
    {
        MasterCust.DataSource = GridDataSource();
        MasterCust.DataBind();
        //DetailCust.DataSource = ds2;
        //DetailCust.DataBind();
    }

    private DataTable GridDataSource()
    {
        BAL p = new BAL();
        DataTable dTable = new DataTable();
        try
        {
            dTable = p.Load();
        }
        catch (StackOverflowException ee)
        {
            string message = ee.Message.ToString();
        }
        finally
        {
            p = null;
        }
        return dTable;
    }

1 Ответ

3 голосов
/ 10 января 2012

Во-первых, я думаю, что проблема, вероятно, в MasterCust.Я думаю, однако, что это может быть причиной ваших проблем.Если вы обновите свой вопрос о том, как это определяется, это может пролить некоторый дополнительный свет.

Во-вторых, у вас много постороннего кода, который может запутать проблему.Вот что я думаю, что вам нужно сделать, чтобы сократить его до минимума:

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                BindGrid();
            }
        } 
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            // Note that this is for debug purposes only. Production code should log 
            // this exception somewhere so that it can be observed and dealt with
        }
    }

    private void BindGrid()
    {
        MasterCust.DataSource = BAL.Load();
        MasterCust.DataBind();
    }

Тогда ваш класс доступа к бизнесу:

public class BAL
{ 
    private static string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["dbCustConn"].ToString();
    private static string cmdStr = "Select * from MainDB";

    public static DataTable Load() // what is this for? (loads all the records from the database)
    {
        using (var adp = new SqlDataAdapter(cmdStr, connStr))
        {
            var ds = new DataSet();
            adp.Fill(ds);
            return ds.Tables[0];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...