1. 程式人生 > >c#實現開啟資料庫並進行查詢,修改等操作

c#實現開啟資料庫並進行查詢,修改等操作

c#連線資料庫需要引用一些東西,首先我們引用:using System.Data.OleDb。

其次我們需要拖動一些控制元件,包括button,combobox,datagridview等。。。這裡就不一一說明了。效果圖如下

 

1.能不能自己選擇開啟某個資料庫呢?而不是在程式碼裡面就已經確定我要開啟某個資料庫了?

首先要寫的是下面的這個程式碼,這個程式碼是寫在form裡買的全域性變數,因為如果寫在某個button的響應事件,就成為了區域性變數,以後不能去引用,很麻煩。

string dbname = "";//資料庫的名稱,帶字尾
        string db_con = "";//建立connection是需要提供的版本資訊,資料庫名稱
        string sql = "";//從資料庫中查詢表格的SQL語句
        OleDbConnection conn = new OleDbConnection();//建立一個數據庫連線的類
        DataSet dat = new DataSet();//建立一個記憶體資料庫,用來儲存你連線的資料庫
        OleDbDataAdapter ad;//建立一個各種類,用來進行資料庫和記憶體的操作關聯必須,筆者也不是很理解這些類的作用
        OleDbCommand comd;
        OleDbDataReader read;
        OleDbCommandBuilder bu;
        DataTable students;  

這個程式碼是寫在一個button控制元件裡面的click響應函式裡面的,實現連線資料庫,並且將其表現在datagridview控制元件中

 OpenFileDialog of = new OpenFileDialog();
            of.ShowDialog();
            dbname = of.SafeFileName;//open file and get the name of file       
            db_con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbname;//fill the datasource with file name
            conn.ConnectionString = db_con;
            conn.Open();
            sql = "SELECT * FROM student";
            ad = new OleDbDataAdapter(sql, conn);
            bu = new OleDbCommandBuilder(ad);
            ad.Fill(dat,"neicun_table");
            students = dat.Tables[0];
            ad.Update(dat, "neicun_table");
            dataGridView1.DataSource = students;

2.如何建立一個combobox,使其實現自動獲取資料庫的各個欄位名稱並且顯示呢?這樣就可以根據條件來篩選出自己想要的資料了?

其實很簡單隻需要下面的幾行程式碼(此程式碼也是寫在button1控制元件裡面的)就可以獲取你資料庫的所有欄位名稱,並且顯示到combobox中

 for (int i = 0; i < this.dataGridView1.Columns.Count; i++)
              {
                  comboBox1.Items.Add(this.dataGridView1.Columns[i].HeaderText);
              }

3.還想實現另外一個combobox,當選中combobox1中某個欄位時,該combobox自動顯示出該欄位下面的所有值,用來作為篩選條件。程式碼寫在combobox1中的seleceindexchange事件中,意思是選中的下標狀態改變時,執行此事件

這裡用到的時datareader類,該類可以讀取資料庫,呼叫其中的獲取指定列欄位名的方法,獲得你選擇的欄位。不過後來筆者發現,有更簡單的辦法

ad = new OleDbDataAdapter(sql, conn);
            ad.Fill(dat, "neicun_table");
            comd = new OleDbCommand();
            comd.CommandText = sql;
            comd.Connection = conn;
            read = comd.ExecuteReader();
            string col_title = read.GetName(comboBox1.SelectedIndex);
        comboBox2.DataSource = dat;
      comboBox2.DisplayMember = "neicun_table." + col_title;

  

只需要一行程式碼,就可以實現,如果採用這種辦法,則不需要定義全域性變數 OleDbCommand comd;OleDbDataReader read;

comboBox2.DataSource = dat;
comboBox2.DisplayMember = "neicun_table." + comboBox1.SelectedItem;

 但是這裡有個小小的問題,如果該欄位是性別,那麼就會出現一些不是很好的情況,你會發現有男女重複的展示,筆者這裡沒有對此優化,如果大家有好的辦法,可以交流一下。

 

 4.那麼就到了最後一步了,當我確定了篩選條件之後,如何改變datagridview的值呢,實現同步的更新?