C# - asp.net - 对这个编码提出疑问

时间:2012-01-04 22:42:02

标签: c# asp.net

1)它加载速度极慢,耗时超过20秒,但它确实加载了DataBase。这是正常的吗?

2)如果连接良好,我把hello和bye响应测试。它写了hello和bye很多次,比如hellohellohellohello ... byebyebyebye ...这是正常的吗?我认为这与问题3有关。

3)当我注释掉catch(异常)时,我收到一条错误,指出InvalidOperationException“timeout expired”。我认为catch对于捕获偶然的错误是有好处的,而不是一遍又一遍的错误。我认为那意味着什么是错的?

    protected void Page_Load(object sender, EventArgs e)
    {

        SqlConnection Conn = new SqlConnection("Data Source=aserver;Initial Catalog=KennyCust;Persist Security Info=True;user id=sa;pwd=qwerty01");
        SqlDataReader rdr = null;
        string commandString = "SELECT * FROM MainDB";
        string commandString2 = "SELECT * From DetailDB";

        try
        {
            Conn.Open();
            SqlCommand Cmd = new SqlCommand(commandString, Conn);
            SqlDataAdapter sdp = new SqlDataAdapter(Cmd);
            DataSet ds = new DataSet();
            if (Conn != null)
            {
                Response.Write("Hello");
            }

            ds.Clear();
            sdp.Fill(ds);
            MasterCust.DataSource = ds.Tables[0];
            MasterCust.DataBind();
        }
        catch (Exception)
        {

        }
        finally
        {
            if (rdr != null)
            {
                rdr.Close();
            }
            if (Conn != null)
            {
                Conn.Close();
                if (Conn != null)
                {
                    Response.Write("Bye");
                }
            }
        }

3 个答案:

答案 0 :(得分:3)

这就是为什么仅仅“吞下”异常通常不是一个好主意。很可能是一个严重的问题,导致大多数数据库请求超时,而不是得到一个有用的错误,你可以用来弄清问题是什么,你只是让用户抱怨系统正在永远加载一个页。

真正的问题在于您的数据库表结构或连接,或者您只是拥有太多数据,而“SELECT * FROM ...”正在扼杀您的性能。

关于多个“hello”和“bye”消息,显然会导致多次调用Page_Load。如果此代码位于控件上并且您正在向页面添加控件的多个实例,则会发生这种情况。我也看到它发生在其他情况下,但我不记得到底是什么。

答案 1 :(得分:0)

听起来你的查询是超时的(默认超时是30秒),但你正在用空的catch块吞下异常。检查数据集的大小或进行较小的查询(从maindb中选择前100 *)

答案 2 :(得分:0)

在表单加载中,您只能在以下内容中执行SQL调用:

if(!(Page.IsPostback))
{

  //Do SQL in here

}

这样每次刷新页面时SQL都不会运行。