问题描述
|
当计时器间隔很短并且计时器打钩时,运行数据库操作并更新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页?