之前做的是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#数据库操作
我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; }
这样基本完成了数据库的搭建和显示。