WPF應用Access數據庫
現在Access數據庫中有表GuestTable,其中的字段如下圖所示,現在需要應用WPF技術為此表制作一個數據庫管理窗口,實現對此數據庫中的數據進行數據的增、刪、改和查操作。
對數據的操作首先需要獲取對數據庫文件的連接,創建與數據庫連接的程序如下所示,其中“..//..//DataBase//InkColorMatchingDB.mdb”可以替換為自己項目中Access數據庫相對於Bin/Debug/**.exe可執行文件的相對路徑。
private OleDbConnection GetConnection() { string strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..//..//DataBase//InkColorMatchingDB.mdb;"; OleDbConnection con = new OleDbConnection(strcon); return con; }
接下來應用所得到的對數據庫的連接來執行SQL語句增加條目的操作,如下程序所示。
1 try 2 { 3 OleDbConnection con = GetConnection();//獲得對數據庫的連接 4 con.Open();//打開數據庫連接 5 string judge = " SELECT COUNT(*) FROM GuestTable WHERE 公司名稱='" + guestName_TB.Text.ToString() + "';";//檢測是否已經存在所輸入的公司名稱 6 OleDbCommand judgecmd = new OleDbCommand(judge, con);//對數據庫執行SQL語句操作,並且獲得返回的結果 7 int rowNum = (int)judgecmd.ExecuteScalar(); 8 if(rowNum==0) 9 { 10 string insertstr = "INSERT INTO GuestTable(公司名稱, 地址,省,市, 郵編,國家,電話號碼,傳真號,聯系人,電子郵件) VALUES ('"; 11 insertstr += guestName_TB.Text.ToString() + "', '"; 12 insertstr += guestAddress_TB.Text.ToString() + "','"; 13 insertstr += guestProvince_TB.Text.ToString() + "','"; 14 insertstr += guestCity_TB.Text.ToString() + "','"; 15 insertstr += guestPostCode_TB.Text.ToString() + "','"; 16 insertstr += guestCountry_TB.Text.ToString() + "','"; 17 insertstr += guestPhoneNum_TB.Text.ToString() + "','"; 18 insertstr += guestFax_TB.Text.ToString() + "','"; 19 insertstr += guestContactPerson_TB.Text.ToString() + "','"; 20 insertstr += guestEmail_TB.Text.ToString() + "');";//整理插入數據的Sql語句 21 OleDbCommand insertcmd = new OleDbCommand(insertstr, con); 22 insertcmd.ExecuteNonQuery(); 23 con.Close(); 24 } 25 else 26 { 27 throw new Exception("所輸入客戶名稱重復!"); 28 } 29 }catch(Exception ex) 30 { 31 32 MessageBox.Show(ex.Message); 33 return; 34 }
刪除數據的操作如下:
1 try 2 { 3 //連接數據庫,獲取數據顯示在客戶列表中 4 OleDbConnection mycon = GetConnection(); 5 mycon.Open(); 6 string sql = "delete * from GuestTable where 公司名稱='" + name+"';"; 7 OleDbCommand myCommand = new OleDbCommand(sql, mycon); 8 myCommand.ExecuteNonQuery(); 9 mycon.Close(); 10 } 11 catch (Exception ex) 12 { 13 throw (new Exception("刪除數據出現錯誤:" + ex.Message)); 14 }
更新數據的操作如下(其中如this.guestName_TB.Text.ToString()者均為從界面上所獲得的用戶輸入的數值):
1 //用到了我前面寫的那個得到數據庫連接的函數 2 OleDbConnection conn = GetConnection(); //getConn():得到連接對象, 3 conn.Open(); 4 //確定我們需要執行的SQL語句,本處是UPDATE語句! 5 sqlstr = "UPDATE GuestTable SET "; 6 sqlstr += "公司名稱='" + this.guestName_TB.Text.ToString() + "',"; 7 sqlstr += "地址='" + this.guestAddress_TB.Text.ToString() + "',"; 8 sqlstr += "省='" + this.guestProvince_TB.Text.ToString() + "',"; 9 sqlstr += "市='" + this.guestCity_TB.Text.ToString() + "',"; 10 sqlstr += "郵編='" + this.guestPostCode_TB.Text.ToString() + "',"; 11 sqlstr += "國家='" + this.guestCountry_TB.Text.ToString() + "',"; 12 sqlstr += "電話號碼='" + this.guestPhoneNum_TB.Text.ToString() + "',"; 13 sqlstr += "傳真號='" + this.guestFax_TB.Text.ToString() + "',"; 14 sqlstr += "聯系人='" + this.guestContactPerson_TB.Text.ToString() + "',"; 15 sqlstr += "電子郵件='" + this.guestEmail_TB.Text.ToString() + "' "; 16 sqlstr += " where 公司名稱='" + this.name+"';"; 17 //定義command對象,並執行相應的SQL語句 18 OleDbCommand myCommand = new OleDbCommand(sqlstr, conn); 19 myCommand.ExecuteNonQuery(); //執行非查詢語句 20 conn.Close();
如果需要查詢數據庫中的數據的話,則代碼如下:
//獲取數據庫中的數據 try { //連接數據庫,獲取數據顯示在客戶列表中 OleDbConnection mycon = GetConnection(); mycon.Open(); string sql = "select * from GuestTable;"; OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = new OleDbCommand(sql, mycon); adapter.Fill(guestData, "GuestTable");//其中guestData為DataSet類對象其中存儲查詢到的所有數據,“GuestTabel”為查詢所針對的數據表 mycon.Close(); } catch(Exception e) { throw (new Exception("讀取數據庫內的數據出錯:" + e.Message)); }