C#后台制作之数据库(Access数据库+datagirdview控件显示+串口数据存储)

之前做的是C#后台接收显示串口数据。主要数据如下图:

现在要将这些数据存入数据库,并且在后台上用表格显示,后续用曲线图表现出来。

第一步,我想着先连接好数据库和表格。采用按钮实现:

   private DataSet ds = new DataSet();//数据库操作

        private void button4_Click(object sender, EventArgs e)
        {
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\\Users\\jiong\\Desktop\\BMS\\BMS\\BMS_data.accdb";
        string sql = "select * from 博达电池数据表";
        OleDbConnection connection = new OleDbConnection(connectionString);
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, connection);
        dataAdapter.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0].DefaultView;
        dataGridView1.AllowUserToAddRows = false;
        }

第二步,将textbox中的数据存入数据库的对应表格中。

首先应熟悉C#数据库操作

操作涉及的主要C#类有:
DataSet:对应数据库表的一个集合,实际上是数据库表在内存中的一个缓存
DataTable:对应数据库表,是数据库表行的集合
DataRow:对应数据库表行
OleDbConnection:建立数据库连接
OleDbDataAdapter:由数据库生成DataSet,并负责DataSet与数据库的同步
OleDbCommandBuilder:生成更新数据库所需的指令
 
DataSet、DataTable、DataRow用于数据在缓存中的操作,这上面的操作只有更新到数据库中,修改结果才会被永久保存。OleDbConnection 是用OLEDB方法连接数据库所必需的。OleDbDataAdapter和OleDbCommandBuilder用来生成DataSet,完成数据库更新。与OleDbDataAdapter和OleDbCommandBuilder相对应,SqlDataAdapter和SqlCommandBuilder也可以完成用SQL语言为指令的数据库更新。

 我Access数据库位置如第一步所示。数据库中有一张名为博达电池数据表的表格,表的结构如下:

日期获取(http://blog.163.com/ljq086@126/blog/static/549639712010112921658843/

                        DataRow drx = ds.Tables[0].NewRow(); //创建一条新记录行
                        drx["时间"] = DateTime.Now.ToLongTimeString().ToString();
                        drx["第一节电压"] = textBox1.Text; drx["第二节电压"] = textBox2.Text; drx["第三节电压"] = textBox3.Text; drx["第四节电压"] = textBox4.Text; drx["第五节电压"] = textBox5.Text;
                        drx["第六节电压"] = textBox6.Text; drx["第七节电压"] = textBox7.Text; drx["第八节电压"] = textBox8.Text; drx["第九节电压"] = textBox9.Text; drx["第十节电压"] = textBox10.Text;
                        drx["第十一节电压"] = textBox11.Text; drx["第十二节电压"] = textBox12.Text; drx["第十三节电压"] = textBox13.Text; drx["第十四节电压"] = textBox14.Text; drx["第十五节电压"] = textBox15.Text;
                        drx["第十六节电压"] = textBox16.Text;
                        ds.Tables[0].Rows.Add(drx); //在表中追加记录

 试了一下这种方法,可以添加。不过我将它放在button4_Click函数中,结果是按一下button,刷新一下,重复显示了。如下所示:

按一下重新显示,而不是我想要的增加一条新的显示。分析之后发现是因为每次按下按钮后,都会重新绑定数据源进行显示。

所以更改思路:在Formload中进行数据源绑定,然后在接收处理串口数据时就将数据写入dataGridView1,这样来数据后就自动增加一行显示新数据。

            OleDbConnection connection = new OleDbConnection(connectionString);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, connection); 
            dataAdapter.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0].DefaultView;
            dataGridView1.AllowUserToAddRows = false;//通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。
                                                    //如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。

然后将按钮“显示表格”功能改为“保存数据”,将数据保存到数据库。

        private void button4_Click(object sender, EventArgs e)
        {
        OleDbConnection connection = new OleDbConnection(connectionString);
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, connection);
        OleDbCommandBuilder cb = new OleDbCommandBuilder(dataAdapter); // 创建OleDbCommandBuilder对象cb用于更新OleDbDataAdapter对象da的Insert、Delete、Update指令
        dataAdapter.UpdateCommand = cb.GetUpdateCommand(); //更新OleDbDataAdapter对象da的指令
        dataAdapter.Update(ds); //更新数据库
        
        //-------重新绑定dataGridView的数据源,以便重新显示-------
        //dataAdapter.Fill(ds);
        //DataTable tblAuthors1;
        //tblAuthors1 = ds.Tables["博达电池数据"];
        //dataGridView1.DataSource = tblAuthors1;
        //dataAdapter.Update(ds); //更新数据库
            //dataAdapter.Fill(ds);
            //dataGridView1.DataSource = ds.Tables[0].DefaultView;
            
        }

这样基本完成了数据库的搭建和显示。

原文地址:https://www.cnblogs.com/preorder69/p/3001655.html