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

這樣基本完成了數據庫的搭建和顯示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM