c#请教多个dataGridView操作数据库
c#请教多个dataGridView操作数据库c# winform Net2.0 Sql2005
同一个winfrom有8个dataGridView,dataGridView1,dataGridView2,dataGridView3 ......
窗体Load加载的时候,按照各个条件,把查询的数据分别填充到各个dataGridView
然后使用Timer计时器100毫秒刷新一次,各自的dataGridView,各个计时器分别是timer1,timer2,timer3 ....
之后,使用Sockets多线程接收发来的消息,修改数据库。
如果用常规的方法,发现查询和修改会发生冲突,比如timer1正在查询刷新数据库,Sockets刚好接到消息,对数据库Update这个时候就冲突了。
就会抛出各种异常。请教各位有什么好方法解决,请尽量把代码写的详细点,谢谢!
我把我常规做法的代码先写出来,让各位指导!
//Conn.cs的数据库连接文件
class Conn
{
private static string cn =.;Initial Catalog=Db2013;User ID=sa;pwd=123456;MultipleActiveResultSets=True";
public static SqlConnection rs = new SqlConnection(cn);
}
private DataSet ds1 = new DataSet();//设置为ds
private DataSet ds2 = new DataSet();//设置为ds
.....
private SqlDataAdapter da1;//设置为da
private SqlDataAdapter da2;//设置为da
....
//窗体加载时Load
private void FormMain_Load(object sender, EventArgs e)
{
try
{
string sql1 = "Select ID,Code,aName From Biao Where Code=1 order by Code asc";
da1 = new SqlDataAdapter(sql1, Conn.rs);
da1.Fill(ds1, "ZU1");
Dgv1.DataSource = ds1.Tables["ZU1"];
}
catch (Exception ex1)
{
//..
}
finally
{
Conn.rs.Close();
}
Thread.Sleep(100);
try
{
string sql2 = "Select ID,Code,aName From Biao Where Code=2 order by Code asc";
da2 = new SqlDataAdapter(sql2, Conn.rs);
da2.Fill(ds2, "ZU2");
Dgv2.DataSource = ds2.Tables["ZU2"];
}
catch (Exception ex2)
{
//..
}
finally
{
Conn.rs.Close();
}
//....
}
//计时器1
private void timer1_Tick(object sender, EventArgs e)
{
ds1.Tables["ZU1"].Clear();
da1.Fill(ds1, "ZU1");
}
//计时器2
private void timer2_Tick(object sender, EventArgs e)
{
ds2.Tables["ZU2"].Clear();
da2.Fill(ds2, "ZU2");
}
//计时器3 4 5 6 7 8.....
//Sockets多线程接收到有消息,就对数据库Update操作
private void BeginListen1()
{
//......
while (true)
{
//....
if (Hang1.Length != 0)//Dgv第一行,有人在线
{
try
{
Int32 result = 0;
string sql = string.Format("Update Abiao Set Code='" + ZU1_h1 + "' Where ID=1");
SqlCommand cmd = new SqlCommand(sql, Conn.rs);
Conn.rs.Open();
result = cmd.ExecuteNonQuery();
if (result < 1)
{
new SqlCommand("Update Bbiao Set Code='' Where BLie='" + ZU1_h1 + "'", Conn.rs).ExecuteNonQuery();
}
else
{
new SqlCommand("Insert Into Cbiao (Code)values('" + ZU1_h1 + "')", Conn.rs).ExecuteNonQuery();
}
}
catch (Exception ex)
{
//...
}
finally
{
Conn.rs.Close();
}
}
}
}
请问,我在窗体加载的时候,怎么样写。让数据显示到各个dataGridView中
然后,每N秒计时器里刷新又怎么样写。
Sockets多线程接收到有消息,对数据库Update操作,又怎么样写,才不会导致他们冲突呢?
谢谢! winform datagridview 多线程 sql2005 --------------------编程问答-------------------- 首先你得在逻辑上明确怎么处理这些冲突,是先收到为准,还是后收到为准什么的。 --------------------编程问答-------------------- 这样处理好乱,感觉 --------------------编程问答-------------------- 首先收到的,首先处理。后收到的后处理。
不过,他们是多线程的,所以,处理的应该是独立线程。难以分出来先后
请教,有什么好方法,解决这些冲突吗?
请写个详细代码。谢谢。
补充:.NET技术 , C#