之前做的是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; }
這樣基本完成了數據庫的搭建和顯示。