时间间隔短,Timer1_Tick更新数据库并再次绑定数据时如何平稳运行?

问题描述

| 当计时器间隔很短并且计时器打钩时,运行数据库操作并更新asp.net Web用户界面, 我无法键入文本或选择DropDownList。 实时操作数据库时如何使不影响使用的操作? 如果有很多用户,恐怕会影响数据库性能,例如速度慢 我已将其设置为在更改时进行更新,但仍然经常干预操作,例如我无法选择下拉列表或无法在文本框中键入
</ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID=\"Timer1\" EventName=\"Tick\" /> 
    </Triggers> 
    </asp:UpdatePanel>
protected void Timer1_Tick(object sender,EventArgs e)
        {
            string[] last_serial_no = new string[Calculator_GridView.Rows.Count];
            string[] last_a1_textBox = new string[Calculator_GridView.Rows.Count];
            string[] last_b1_textBox = new string[Calculator_GridView.Rows.Count];
            string[] last_mp_dropdown = new string[Calculator_GridView.Rows.Count];

            bool change = false;
            for (int i = 0; i < Calculator_GridView.Rows.Count; i++)
            {
                string serial_no = Calculator_GridView.Rows[i].Cells[1].Text;
                string a1_textBox = Calculator_GridView.Rows[i].Cells[2].Text;
                string b1_textBox = Calculator_GridView.Rows[i].Cells[3].Text;
                DropDownList mp_dropdown = (DropDownList)Calculator_GridView.Rows[i].Cells[4].Controls[1];

                //TextBox Result_textBox = (TextBox)Calculator_GridView.Rows[e.RowIndex].Cells[5].Controls[0];

                if (last_serial_no[i] != serial_no ||
                last_a1_textBox[i] != a1_textBox ||
                last_b1_textBox[i] != b1_textBox ||
                last_mp_dropdown[i] != mp_dropdown.SelectedValue)
                {
                    string executestring = \"\";
                    executestring = \"Update cal set a1=\" + a1_textBox;
                    executestring = executestring + \",b1=\" + b1_textBox;
                    executestring = executestring + \",mp=\" + mp_dropdown.SelectedValue;
                    executestring = executestring + \",result=\" + (Convert.Todouble(mp_dropdown.SelectedValue) * Convert.Todouble(b1_textBox)).ToString();
                    executestring = executestring + \" where [識別碼]=\" + serial_no;
                    ExecuteDatabase(executestring);

                    change = true;
                }
                last_serial_no[i] = serial_no;
                last_a1_textBox[i] = a1_textBox;
                last_b1_textBox[i] = b1_textBox;
                last_mp_dropdown[i] = mp_dropdown.SelectedValue;
            }

            if (change == true)
            {
                string connstr = @\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/db1.mdb\";
                OleDbConnection conn = new OleDbConnection(connstr);
                conn.ConnectionString = connstr;

                try
                {
                    conn.open();
                }
                catch (Exception ex)
                {
                    conn.Close();
                }

                OleDbCommand get_info_cmd = null;
                get_info_cmd = new OleDbCommand(\"SELECT [識別碼],[a1],[b1],[result],[mp] FROM [cal]\",conn);

                OleDbDataReader get_info_Reader = get_info_cmd.ExecuteReader();

                store.Columns.Add(new DataColumn(\"識別碼\",typeof(int)));
                store.Columns.Add(new DataColumn(\"a1\",typeof(double)));
                store.Columns.Add(new DataColumn(\"b1\",typeof(double)));
                store.Columns.Add(new DataColumn(\"mp\",typeof(double)));
                store.Columns.Add(new DataColumn(\"result\",typeof(double)));

                DaTarow dr;

                try
                {
                    while (get_info_Reader.Read())
                    {
                        dr = store.NewRow();
                        dr[0] = get_info_Reader[\"識別碼\"].ToString();
                        dr[1] = get_info_Reader[\"a1\"].ToString();
                        dr[2] = get_info_Reader[\"b1\"].ToString();
                        dr[3] = get_info_Reader[\"mp\"].ToString();
                        dr[4] = (Convert.Todouble(get_info_Reader[\"b1\"].ToString()) * Convert.Todouble(get_info_Reader[\"mp\"].ToString())).ToString();

                        store.Rows.Add(dr);
                    }
                }
                catch (Exception ex)
                {
                    Error_Label.Text = Error_Label.Text + ex.ToString();
                    conn.Close();
                }
                finally
                {
                    get_info_cmd.dispose();
                    get_info_Reader.Close();
                    conn.Close();
                }
                storeview = new DataView(store);

                Calculator_GridView.Font.Size = new FontUnit(10);
                Calculator_GridView.DataSourceID = \"\";
                Calculator_GridView.DataSource = storeview;
                Calculator_GridView.DataBind();
            }
        }
    

解决方法

我认为您应该在单独的线程中执行数据库操作。此外,如何更新提到的ASP.Net页?