当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,