溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-07-07 15:48:10 來(lái)源:億速云 閱讀:753 作者:Leah 欄目:編程語(yǔ)言

本篇文章為大家展示了C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

對(duì)數(shù)據(jù)庫(kù)的操作總體可以分為兩類:查詢(select)和更新(insert,delete,update)。為什么這樣來(lái)分呢?仔細(xì)看看兩類的區(qū)別,select只是從數(shù)據(jù)庫(kù)中將數(shù)據(jù)拿出來(lái)使用,而其余三者都會(huì)對(duì)數(shù)據(jù)庫(kù)的物理數(shù)據(jù)進(jìn)行修改。capucivar在上篇文章中已經(jīng)對(duì)數(shù)據(jù)庫(kù)的查詢操作進(jìn)行了詳細(xì)的闡述。這篇文章將接著闡述更新數(shù)據(jù)。

更新數(shù)據(jù)庫(kù)信息首先是連接數(shù)據(jù)庫(kù),這個(gè)capucivar在《C#連接數(shù)據(jù)庫(kù)之查詢數(shù)據(jù)庫(kù)》中已有介紹了。對(duì)數(shù)據(jù)庫(kù)的更新需要一個(gè)對(duì)象:OleDbCommand。該對(duì)象表示要對(duì)數(shù)據(jù)源執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程。

這個(gè)對(duì)象有三個(gè)屬性:1、CommandText表示要設(shè)置命令的文本;2、Connection表示要設(shè)置命令的連接;3、CommandType表示設(shè)置命令的類型,默認(rèn)的是Sql語(yǔ)句(但如果不是執(zhí)行sql語(yǔ)句,就一定要指定命令的類型)。OleDbCommand對(duì)象設(shè)置好以后,就該執(zhí)行sql語(yǔ)句了。方法ExecuteNonQuery()就是執(zhí)行sql語(yǔ)句。如果記不住這個(gè)方法,教你一個(gè)簡(jiǎn)單的記法:將“ExecuteNonQuery”單詞分為三部分,就是“執(zhí)行不查詢”,那就是更新數(shù)據(jù)了。

下面就做一個(gè)例子熟悉對(duì)數(shù)據(jù)庫(kù)的更新:

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

C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù)

界面做好以后就相當(dāng)于做了一個(gè)空殼子。接下來(lái)就是往里邊添加事件了。我們還要借用上篇文章中的ConnDb類,在該類里添加一個(gè)方法:update()對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新,該方法里有一個(gè)參數(shù)string sql。

public class ConnDb

    { OleDbConnection conn = null;//連接數(shù)據(jù)庫(kù)的對(duì)象

//下面是構(gòu)造函數(shù)連接數(shù)據(jù)庫(kù)

        public ConnDb()

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

            {  conn = new OleDbConnection();

            conn.ConnectionString="provider=sqloledb.1;data source=.;initial catalog=capucivar;user id=sa;pwd=";//連接數(shù)據(jù)庫(kù)的字符串 }

            if (conn.State == ConnectionState.Closed)

            {  conn.Open();//打開數(shù)據(jù)庫(kù)連接

            } }

//下面這個(gè)方法是從數(shù)據(jù)庫(kù)中查找數(shù)據(jù)的方法

        public DataSet query(string sql)

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

            OleDbDataAdapter da = new OleDbDataAdapter(sql,conn);//從數(shù)據(jù)庫(kù)中查詢

            da.Fill(ds);//將數(shù)據(jù)填充到DataSet

            connClose();//關(guān)閉連接

            return ds;//返回結(jié)果

        }

//下面的方法是對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新

        public int update(string sql)

        {OleDbCommand oc = new OleDbCommand();//表示要對(duì)數(shù)據(jù)源執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程

            oc.CommandText = sql;//設(shè)置命令的文本

            oc.CommandType = CommandType.Text;//設(shè)置命令的類型

            oc.Connection = conn;//設(shè)置命令的連接

            int x=oc.ExecuteNonQuery();//執(zhí)行SQL語(yǔ)句

            connClose();//關(guān)閉連接

            return x;   //返回一個(gè)影響行數(shù)

        }

//下面的connClose()方法是關(guān)閉數(shù)據(jù)庫(kù)連接

        public void connClose()

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

            {//判斷數(shù)據(jù)庫(kù)的連接狀態(tài),如果狀態(tài)是打開的話就將它關(guān)閉

                conn.Close();    }   }  }

對(duì)數(shù)據(jù)庫(kù)的操作類寫好了。然后就來(lái)實(shí)現(xiàn)增刪改的功能:

理一下思路,先添加一個(gè)用戶,如何編寫代碼:1、得到客戶所填的數(shù)據(jù)(用戶名和密碼);2、編寫insert語(yǔ)句,將用戶信息通過(guò)ConnDb()類添加到數(shù)據(jù)庫(kù)中;3、返回一個(gè)影響行數(shù)以便通知客戶執(zhí)行是否成功。代碼如下:

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語(yǔ)句將該用戶信息插入到數(shù)據(jù)庫(kù)中

            int x = new Db.ConnDb().update(sql);//通過(guò)ConnDb()對(duì)象的update()方法執(zhí)行sql語(yǔ)句并返回一個(gè)影響行數(shù)

            if (x > 0)

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

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

            } else {

                MessageBox.Show("添加失?。?quot;);

            } }

添加一個(gè)用戶之后,在右邊的listBox中顯示出來(lái):

public void refurbish()

    { string sql = "select * from users";//sql語(yǔ)句查詢數(shù)據(jù)

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

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

   this.listBox1.DataSource=ds.Tables[0];// listBox的數(shù)據(jù)源

 }

執(zhí)行結(jié)果如下:

C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù)

而當(dāng)客戶選中右邊的listBox中的一個(gè)選項(xiàng)時(shí),可以進(jìn)行相應(yīng)的刪除或修改。刪除的代碼如下:

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語(yǔ)句刪除用戶

            int x = new Db.ConnDb().update(sql);//調(diào)用update()方法返回影響行數(shù)

            if (x > 0)

            {//根據(jù)返回的影響行數(shù)判斷刪除是否成功

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

            } else{

          MessageBox.Show("刪除失?。?quot;);   }  }

刪除之后的結(jié)果如下:

C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù)

在點(diǎn)擊“更新”按鈕之后,應(yīng)該彈出一個(gè)窗口顯示客戶所選用戶的信息供客戶更新。更新的代碼如下:

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()//無(wú)參構(gòu)造函數(shù)

        {  InitializeComponent();  }

        public upd(string uname)//有參構(gòu)造函數(shù)

        { InitializeComponent();

        this.uname_text.Text = uname;//將用戶名放到文本框

            string sql = string.Format("select * from users where username='{0}'", uname);//拼寫sql語(yǔ)句通過(guò)用戶名查找用戶的信息

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

//下面得到結(jié)果集中的信息分別放至相應(yīng)文本框中

            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)//點(diǎn)擊“確認(rèn)修改”按鈕所響應(yīng)的事件

    {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);//拼寫一個(gè)修改sql語(yǔ)句

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

            if (x > 0)

            {//根據(jù)影響行數(shù)判斷修改是否成功

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

                this.Visible = false;//將該頁(yè)面隱藏

            } else  {

                MessageBox.Show("修改失?。?quot;);

                return; } }

        private void button2_Click(object sender, EventArgs e){//點(diǎn)擊“取消”按鈕所響應(yīng)的事件

            this.Visible = false;//將該頁(yè)面隱藏

        }  }}

修改的結(jié)果如下:

C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù)

在每次對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改之后,界面右邊的listBox中的數(shù)據(jù)就會(huì)更新一次,所以每次對(duì)數(shù)據(jù)庫(kù)操作之后都應(yīng)該調(diào)用refurbish()方法。一個(gè)簡(jiǎn)單的使用C#對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的代碼就寫完了。代碼寫的很簡(jiǎn)單,只是完成了最簡(jiǎn)單的增刪改查功能,可以將上述的代碼更加完善。

上述內(nèi)容就是C#中怎么連接數(shù)據(jù)庫(kù)和更新數(shù)據(jù)庫(kù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI