在本篇文章中,我們將介紹Visual C#對數據庫的一個基本操作,即:如何往數據庫中添加記錄。我們將通過一些數據庫操作的例子,來具體說明一下。為了更清楚的說明這個問題,在選用數據庫方面采用了二種當前比較典型的數據庫,其一是本地數據庫--Access 2000,另外一個是遠程數據庫--SQL SERVER 7.0。首先介紹如何用Visual C#來添加Access 2000數據庫的記錄。
一.用Visual C#來添加Access 2000數據庫的記錄 (一).程序設計和運行的環境設置: (1)視窗2000服務器版 (2)Microsoft Data Acess Component 2.6 以上版本 ( MDAC 2.6 ) (3)本文程序使用的數據庫的介紹:
程序中使用的數據庫名稱為sample.mdb,在此數據庫中有一張數據表books。此數據表的結構如下: 字段名稱 字段類型 代表意思 Bookid 數字 序號 booktitle 文本 書籍名稱 bookauthor 文本 書籍作者 bookprice 數字 價格 bookstock 數字 書架號
(二).程序設計難點和應該注意的問題: 如何正確的往數據庫中添加記錄是本文要討論的一個重點和難點,下面就是解決這一問題的具體思路: (1)創建并打開一個 OleDbConnection對象。 (2)創建一個插入一條記錄的SQL語句。 (3)創建一個OleDbCommand對象。 (4)通過此OleDbCommand對象完成對插入一條記錄到數據庫的操作。 以下是在程序中實現的具體語句: string strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = sample.mdb " ; OleDbConnection myConn = new OleDbConnection ( strConn ) ; myConn.Open ( ) ; string strInsert = " INSERT INTO books ( bookid , booktitle , bookauthor , bookprice , bookstock ) VALUES ( " ; strInsert += t_bookid.Text + ", '" ; strInsert += t_booktitle.Text + "', '" ; strInsert += t_bookauthor.Text + "', " ; strInsert += t_bookprice.Text + ", " ; strInsert += t_bookstock.Text + ")" ; OleDbCommand inst = new OleDbCommand ( strInsert , myConn ) ; inst.ExecuteNonQuery ( ) ; myConn.Close ( ) ;
(三).用Visual C#來插入記錄的程序源代碼( add.cs )和執行后的界面: 下圖是add.cs編譯后的執行界面:
add.cs源程序代碼: using System ; using System.Drawing ; using System.ComponentModel ; using System.Windows.Forms ; using System.Data.OleDb ; using System.Data ; //導入程序中使用到的名稱空間 public class DataAdd : Form { private Button lastrec ; private Button nextrec ; private Button previousrec ; private Button firstrec ; private Container components ; private Label title ; private Button t_new ; private Button save ; private TextBox t_bookstock ; private TextBox t_bookprice ; private TextBox t_bookauthor ; private TextBox t_booktitle ; private TextBox t_bookid ; private Label l_bookstock ; private Label l_bookprice ; private Label l_bookauthor ; private Label l_booktitle ; private Label l_bookid ; private DataSet myDataSet ; private BindingManagerBase myBind ; //定義在程序中要使用的組件 public DataAdd ( ) { //連接到一個數據庫 GetConnected ( ) ; // 對窗體中所需要的內容進行初始化 InitializeComponent ( ); } //釋放程序使用過的所以資源 public override void Dispose ( ) { base.Dispose ( ) ; components.Dispose ( ) ; } public static void Main ( ) { Application.Run ( new DataAdd ( ) ) ; } public void GetConnected ( ) { try{ //創建一個 OleDbConnection對象 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = sample.mdb" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; string strCom = " SELECT * FROM books " ; //創建一個 DataSet myDataSet = new DataSet ( ) ; myConn.Open ( ) ; //用 OleDbDataAdapter 得到一個數據集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; //把Dataset綁定books數據表 myCommand.Fill ( myDataSet , "books" ) ; //關閉此OleDbConnection myConn.Close ( ) ; } catch ( Exception e ) { MessageBox.Show ( "連接錯誤! " + e.ToString ( ) , "錯誤" ) ; } } private void InitializeComponent ( ) { components = new System.ComponentModel.Container ( ) ; nextrec = new Button ( ) ; lastrec = new Button ( ) ; previousrec = new Button ( ) ; firstrec = new Button ( ) ; t_bookprice = new TextBox ( ) ; l_booktitle = new Label ( ) ; l_bookprice = new Label ( ) ; l_bookauthor = new Label ( ) ; t_bookid = new TextBox ( ) ; save = new Button ( ) ; title = new Label ( ) ; t_bookauthor = new TextBox ( ) ; t_booktitle = new TextBox ( ) ; t_new = new Button ( ) ; l_bookstock = new Label ( ) ; t_bookstock = new TextBox ( ) ; l_bookid = new Label ( ) ; //以下是對數據瀏覽的四個按鈕進行初始化 firstrec.Location = new System.Drawing.Point ( 65 , 312 ) ; firstrec.ForeColor = System.Drawing.Color.Black ; firstrec.Size = new System.Drawing.Size ( 40 , 24 ) ; firstrec.Font = new System.Drawing.Font("仿宋", 8f ); firstrec.Text = "首記錄"; firstrec.Click += new System.EventHandler(GoFirst); previousrec.Location = new System.Drawing.Point ( 135 , 312 ) ; previousrec.ForeColor = System.Drawing.Color.Black ; previousrec.Size = new System.Drawing.Size(40, 24) ; previousrec.Font = new System.Drawing.Font ( "仿宋" , 8f ) ; previousrec.Text = "上一條" ; previousrec.Click += new System.EventHandler ( GoPrevious ) ; nextrec.Location = new System.Drawing.Point ( 205 , 312 ); nextrec.ForeColor = System.Drawing.Color.Black ; nextrec.Size = new System.Drawing.Size ( 40 , 24 ) ; nextrec.Font = new System.Drawing.Font ( "仿宋" , 8f ) ; nextrec.Text = "下一條" ; nextrec.Click += new System.EventHandler ( GoNext ); lastrec.Location = new System.Drawing.Point ( 275 , 312 ) ; lastrec.ForeColor = System.Drawing.Color.Black ; lastrec.Size = new System.Drawing.Size ( 40 , 24 ) ; lastrec.Font = new System.Drawing.Font ( "仿宋" , 8f ) ; lastrec.Text = "尾記錄" ; lastrec.Click += new System.EventHandler ( GoLast ) ; //以下是對顯示標簽進行初始化 l_bookid.Location = new System.Drawing.Point ( 24 , 56 ) ; l_bookid.Text = "書本序號:" ; l_bookid.Size = new System.Drawing.Size ( 112, 20 ) ; l_bookid.Font = new System.Drawing.Font ( "仿宋" , 10f ) ; l_bookid.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; l_booktitle.Location = new System.Drawing.Point ( 24 , 108 ) ; l_booktitle.Text = "書 名:"; l_booktitle.Size = new System.Drawing.Size ( 112 , 20 ) ; l_booktitle.Font = new System.Drawing.Font ( "仿宋" , 10f ) ; l_booktitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; l_bookprice.Location = new System.Drawing.Point ( 24 , 212 ) ; l_bookprice.Text = "價 格:" ; l_bookprice.Size = new System.Drawing.Size ( 112 , 20 ) ; l_bookprice.Font = new System.Drawing.Font ( "仿宋" , 10f ) ; l_bookprice.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; l_bookstock.Location = new System.Drawing.Point ( 24 , 264 ) ; l_bookstock.Text = "書 架 號:" ; l_bookstock.Size = new System.Drawing.Size ( 112 , 20 ) ; l_bookstock.Font = new System.Drawing.Font ( "仿宋" , 10f ) ; l_bookstock.TabIndex = 16 ; l_bookstock.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; l_bookauthor.Location = new System.Drawing.Point ( 24 , 160 ) ; l_bookauthor.Text = "作 者:" ; l_bookauthor.Size = new System.Drawing.Size ( 112 , 20 ) ; l_bookauthor.Font = new System.Drawing.Font ( "仿宋" , 10f ) ; l_bookauthor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; title.Location = new System.Drawing.Point ( 32 , 16 ) ; title.Text = "利用Vsiual C#來增加數據記錄!" ; title.Size = new System.Drawing.Size ( 336 , 24 ) ; title.ForeColor = System.Drawing.Color.Green ; title.Font = new System.Drawing.Font ( "仿宋" , 14f , System.Drawing.FontStyle.Bold ) ; //以下是對為顯示數據記錄而設定的標簽和文本框進行初始化,并把記錄綁定在不同的綁定到文本框"Text"屬性上 t_bookid.Location = new System.Drawing.Point ( 184 , 56 ) ; t_bookid.Size = new System.Drawing.Size ( 80 , 20 ) ; t_bookid.DataBindings.Add ( "Text" , myDataSet , "books.bookid" ) ; t_bookstock.Location = new System.Drawing.Point ( 184 , 264 ) ; t_bookstock.Size = new System.Drawing.Size ( 80 , 20 ) ; t_bookstock.DataBindings.Add ( "Text" , myDataSet , "books.bookstock" ) ; t_booktitle.Location = new System.Drawing.Point ( 184 , 108 ) ; t_booktitle.Size = new System.Drawing.Size ( 176 , 20 ) ; t_booktitle.DataBindings.Add( "Text" , myDataSet , "books.booktitle" ) ; t_bookprice.Location = new System.Drawing.Point ( 184 , 212 ) ; t_bookprice.Size = new System.Drawing.Size ( 80 , 20 ) ; t_bookprice.DataBindings.Add ( "Text" , myDataSet , "books.bookprice" ) ; t_bookauthor.Location = new System.Drawing.Point ( 184 , 160 ) ; t_bookauthor.Size = new System.Drawing.Size ( 128 , 20 ) ; t_bookauthor.DataBindings.Add ( "Text" , myDataSet , "books.bookauthor" ) ; t_new.Location = new System.Drawing.Point ( 62 , 354 ) ; t_new.Size = new System.Drawing.Size ( 96 , 32 ) ; t_new.Text = "新建記錄" ; t_new.Click += new System.EventHandler ( t_newClick ) ; save.Location = new System.Drawing.Point ( 222 , 354 ) ; save.Size = new System.Drawing.Size ( 96 , 32 ) ; save.TabIndex = 4 ; save.Text = "保存記錄" ; save.Click += new System.EventHandler ( saveClick ) ; this.Text = "利用Vsiual C#來增加數據記錄的程序窗口!" ; this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ; this.FormBorderStyle = FormBorderStyle.Fixed3D ; this.ClientSize = new System.Drawing.Size ( 390 , 400 ) ; //在窗體中加入下列組件 this.Controls.Add ( lastrec ) ; this.Controls.Add ( nextrec ) ; this.Controls.Add ( previousrec ) ; this.Controls.Add ( firstrec ) ; this.Controls.Add ( title ) ; this.Controls.Add ( t_new ) ; this.Controls.Add ( save ) ; this.Controls.Add ( t_bookstock ) ; this.Controls.Add ( t_bookprice ) ; this.Controls.Add ( t_bookauthor ) ; this.Controls.Add ( t_booktitle ) ; this.Controls.Add ( t_bookid ) ; this.Controls.Add ( l_bookstock ) ; this.Controls.Add ( l_bookprice ) ; this.Controls.Add ( l_bookauthor ) ; this.Controls.Add ( l_booktitle ) ; this.Controls.Add ( l_bookid ) ; //把對象DataSet和"books"數據表綁定到此myBind對象 myBind= this.BindingContext [ myDataSet , "books" ] ; } protected void saveClick ( object sender , System.EventArgs e ) { try { //判斷所有字段是否添完,添完則執行,反之彈出提示 if ( t_bookid.Text != "" && t_booktitle.Text != "" && t_bookauthor.Text != "" && t_bookprice.Text != "" && t_bookstock.Text != "" ) { string strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = sample.mdb " ; OleDbConnection myConn = new OleDbConnection ( strConn ) ; myConn.Open ( ) ; string strInsert = " INSERT INTO books ( bookid , booktitle , bookauthor , bookprice , bookstock ) VALUES ( " ; strInsert += t_bookid.Text + ", '" ; strInsert += t_booktitle.Text + "', '" ; strInsert += t_bookauthor.Text + "', " ; strInsert += t_bookprice.Text + ", " ; strInsert += t_bookstock.Text + ")" ; OleDbCommand inst = new OleDbCommand ( strInsert , myConn ) ; inst.ExecuteNonQuery ( ) ; myConn.Close ( ) ; } else { MessageBox.Show ( "必須填滿所有字段值!" , "錯誤!" ) ; } } catch ( Exception ed ) { MessageBox.Show ( "保存數據記錄發生 " + ed.ToString ( ) , "錯誤!" ) ; } } protected void t_newClick ( object sender , System.EventArgs e ) { t_bookid.Text = "" ; t_booktitle.Text = "" ; t_bookauthor.Text = "" ; t_bookprice.Text = "" ; t_bookstock.Text = "" ; } //按鈕"尾記錄"對象事件程序 protected void GoLast ( object sender , System.EventArgs e ) { myBind.Position = myBind.Count - 1 ; }
//按鈕"下一條"對象事件程序 protected void GoNext ( object sender , System.EventArgs e ) { if ( myBind.Position == myBind.Count -1 ) MessageBox.Show ( "已經到了最后一條記錄!" ) ; else myBind.Position += 1 ; } //按鈕"上一條"對象事件程序 protected void GoPrevious ( object sender , System.EventArgs e ) { if ( myBind.Position == 0 ) MessageBox.Show ( "已經到了第一條記錄!" ) ; else myBind.Position -= 1 ; } //按鈕"首記錄"對象事件程序 protected void GoFirst ( object sender , System.EventArgs e ) { myBind.Position = 0 ; } }
成功編譯上面代碼,就可以往Access 2000數據庫里面插入記錄了。
|