• 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;
                
            }

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

  • 相关阅读:
    Loading CSS without blocking render
    总结Web应用中基于浏览器的安全漏洞
    React Native通信机制详解
    HTML Imports
    编程语言和它们的创造者
    USB Transfer and Packet Sizes
    灰色心情
    c++ 深入理解虚函数
    在VS2012中采用C++中调用DLL中的函数(4)
    在C++中调用DLL中的函数(3)
  • 原文地址:https://www.cnblogs.com/preorder69/p/3001655.html
Copyright © 2020-2023  润新知