天天看點

C#連接配接資料庫和插入、删除、更新資料庫

對資料庫的操作總體可以分為兩類:查詢(select)和更新(insert,delete,update)。為什麼這樣來分呢?仔細看看兩類的差別,select隻是從資料庫中将資料拿出來使用,而其餘三者都會對資料庫的實體資料進行修改。capucivar在上篇文章中已經對資料庫的查詢操作進行了詳細的闡述。這篇文章将接着闡述更新資料。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

更新資料庫資訊首先是連接配接資料庫,這個capucivar在《C#連接配接資料庫之查詢資料庫》中已有介紹了。對資料庫的更新需要一個對象:OleDbCommand。該對象表示要對資料源執行的SQL語句或存儲過程。

這個對象有三個屬性:1、CommandText表示要設定指令的文本;2、Connection表示要設定指令的連接配接;3、CommandType表示設定指令的類型,預設的是Sql語句(但如果不是執行sql語句,就一定要指定指令的類型)。OleDbCommand對象設定好以後,就該執行sql語句了。方法ExecuteNonQuery()就是執行sql語句。如果記不住這個方法,教你一個簡單的記法:将“ExecuteNonQuery”單詞分為三部分,就是“執行不查詢”,那就是更新資料了。

下面就做一個例子熟悉對資料庫的更新:

先使用Visual Studio2005做出如下界面:

C#連接配接資料庫和插入、删除、更新資料庫

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

界面做好以後就相當于做了一個空殼子。接下來就是往裡邊添加事件了。我們還要借用上篇文章中的ConnDb類,在該類裡添加一個方法:update()對資料庫進行更新,該方法裡有一個參數string sql。

public class ConnDb

    { OleDbConnection conn = null;//連接配接資料庫的對象

//下面是構造函數連接配接資料庫

        public ConnDb()

        { if (conn==null)//判斷連接配接是否為空

            {  conn = new OleDbConnection();

            conn.ConnectionString="provider=sqloledb.1;data source=.;initial catalog=capucivar;user id=sa;pwd=";//連接配接資料庫的字元串 }

            if (conn.State == ConnectionState.Closed)

            {  conn.Open();//打開資料庫連接配接

            } }

//下面這個方法是從資料庫中查找資料的方法

        public DataSet query(string sql)

        { DataSet ds = new DataSet();//DataSet是表的集合

            OleDbDataAdapter da = new OleDbDataAdapter(sql,conn);//從資料庫中查詢

            da.Fill(ds);//将資料填充到DataSet

            connClose();//關閉連接配接

            return ds;//傳回結果

        }

//下面的方法是對資料庫進行更新

        public int update(string sql)

        {OleDbCommand oc = new OleDbCommand();//表示要對資料源執行的SQL語句或存儲過程

            oc.CommandText = sql;//設定指令的文本

            oc.CommandType = CommandType.Text;//設定指令的類型

            oc.Connection = conn;//設定指令的連接配接

            int x=oc.ExecuteNonQuery();//執行SQL語句

            connClose();//關閉連接配接

            return x;   //傳回一個影響行數

        }

//下面的connClose()方法是關閉資料庫連接配接

        public void connClose()

        { if (conn.State == ConnectionState.Open)

            {//判斷資料庫的連接配接狀态,如果狀态是打開的話就将它關閉

                conn.Close();    }   }  }

對資料庫的操作類寫好了。然後就來實作增删改的功能:

理一下思路,先添加一個使用者,如何編寫代碼:1、得到客戶所填的資料(使用者名和密碼);2、編寫insert語句,将使用者資訊通過ConnDb()類添加到資料庫中;3、傳回一個影響行數以便通知客戶執行是否成功。代碼如下:

private void add_but_Click(object sender, EventArgs e)

        {//按鈕單擊事件

//得到使用者所填的使用者名和密碼

string uname = this.uname_text.Text;            string upass = this.upass_text.Text;

            string sql = string.Format("insert into users values('{0}','{1}')",uname,upass);//拼寫sql語句将該使用者資訊插入到資料庫中

            int x = new Db.ConnDb().update(sql);//通過ConnDb()對象的update()方法執行sql語句并傳回一個影響行數

            if (x > 0)

            {//如果影響行數大于0則說明插入成功,否則的話插入失敗

                MessageBox.Show("添加成功!");

            } else {

                MessageBox.Show("添加失敗!");

            } }

添加一個使用者之後,在右邊的listBox中顯示出來:

public void refurbish()

    { string sql = "select * from users";//sql語句查詢資料

       DataSet ds = new Db.ConnDb().query(sql);//查詢傳回一個DataSet

        this.listBox1.DisplayMember = "username";//listBox中要顯示的列

   this.listBox1.DataSource=ds.Tables[0];// listBox的資料源

 }

執行結果如下:

C#連接配接資料庫和插入、删除、更新資料庫

而當客戶選中右邊的listBox中的一個選項時,可以進行相應的删除或修改。删除的代碼如下:

private void del_but_Click(object sender, EventArgs e)

        {string uname = this.listBox1.Text;//得到listBox中所選的值

            string sql = string.Format("delete from users where username='{0}'",uname);//拼寫sql語句删除使用者

            int x = new Db.ConnDb().update(sql);//調用update()方法傳回影響行數

            if (x > 0)

            {//根據傳回的影響行數判斷删除是否成功

                MessageBox.Show("删除成功!");

            } else{

          MessageBox.Show("删除失敗!");   }  }

删除之後的結果如下:

C#連接配接資料庫和插入、删除、更新資料庫

在點選“更新”按鈕之後,應該彈出一個視窗顯示客戶所選使用者的資訊供客戶更新。更新的代碼如下:

private void upa_but_Click(object sender, EventArgs e)

 {  string uname = this.listBox1.Text;//得到listBox中所選的使用者資訊

   new upd(uname).ShowDialog();//彈出要更新視窗upd.cs }

upd.cs的代碼如下:

    public partial class upd : Form

    {  public upd()//無參構造函數

        {  InitializeComponent();  }

        public upd(string uname)//有參構造函數

        { InitializeComponent();

        this.uname_text.Text = uname;//将使用者名放到文本框

            string sql = string.Format("select * from users where username='{0}'", uname);//拼寫sql語句通過使用者名查找使用者的資訊

            DataSet ds = new Db.ConnDb().query(sql);

//下面得到結果集中的資訊分别放至相應文本框中

            this.uid_text.Text = ds.Tables[0].Rows[0][0].ToString();            this.upass_text.Text = ds.Tables[0].Rows[0][2].ToString();

        }

        private void button1_Click(object sender, EventArgs e)//點選“确認修改”按鈕所響應的事件

    {int uid = Convert.ToInt32(this.uid_text.Text);//得到uid

            string uname = this.uname_text.Text;//得到使用者名

            string upass = this.upass_text.Text;//得到使用者密碼

            string sql = string.Format("update users set username='{0}',userpass='{1}' where uid={2}",uname,upass,uid);//拼寫一個修改sql語句

           int x = new Db.ConnDb().update(sql);//傳回所受影響行數

            if (x > 0)

            {//根據影響行數判斷修改是否成功

                MessageBox.Show("修改成功!");

                this.Visible = false;//将該頁面隐藏

            } else  {

                MessageBox.Show("修改失敗!");

                return; } }

        private void button2_Click(object sender, EventArgs e){//點選“取消”按鈕所響應的事件

            this.Visible = false;//将該頁面隐藏

        }  }}

修改的結果如下:

C#連接配接資料庫和插入、删除、更新資料庫

在每次對資料庫進行修改之後,界面右邊的listBox中的資料就會更新一次,是以每次對資料庫操作之後都應該調用refurbish()方法。一個簡單的使用C#對資料庫進行增删改查的代碼就寫完了。代碼寫的很簡單,隻是完成了最簡單的增删改查功能,可以将上述的代碼更加完善。

轉載于:https://blog.51cto.com/306t9/166949