對數據庫的操作總體可以分為兩類:查詢(select)和更新(insert,delete,update)。為什麼這樣來分 呢?仔細看看兩類的區別,select只是從數據庫中將數據拿出來使用,而其余三者都會對數據庫的物理數 據進行修改。capucivar在上篇文章中已經對數據庫的查詢操作進行了詳細的闡述。這篇文章將接著闡述 更新數據。
更新數據庫信息首先是連接數據庫,這個capucivar在《C#連接數據庫之查詢數據庫》中已有介紹了。 對數據庫的更新需要一個對象:OleDbCommand。該對象表示要對數據源執行的SQL語句或存儲過程。
這個對象有三個屬性:1、CommandText表示要設置命令的文本;2、Connection表示要設置命令的連接 ;3、CommandType表示設置命令的類型,默認的是Sql語句(但如果不是執行sql語句,就一定要指定命令 的類型)。OleDbCommand對象設置好以後,就該執行sql語句了。方法ExecuteNonQuery()就是執行sql語 句。如果記不住這個方法,教你一個簡單的記法:將“ExecuteNonQuery”單詞分為三部分,就是“執行 不查詢”,那就是更新數據了。
下面就做一個例子熟悉對數據庫的更新:
先使用Visual Studio2005做出如下界面:
界面做好以後就相當於做了一個空殼子。接下來就是往裡邊添加事件了。我們還要借用上篇文章中的 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的數據源
}
執行結果如下:
而當客戶選中右邊的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("刪除失敗!"); } }
刪除之後的結果如下:
在點擊“更新”按鈕之後,應該彈出一個窗口顯示客戶所選用戶的信息供客戶更新。更新的代碼如下 :
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;//將該頁面隱藏
} }}
修改的結果如下:
在每次對數據庫進行修改之後,界面右邊的listBox中的數據就會更新一次,所以每次對數據庫操作之 後都應該調用refurbish()方法。一個簡單的使用C#對數據庫進行增刪改查的代碼就寫完了。代碼寫的很 簡單,只是完成了最簡單的增刪改查功能,可以將上述的代碼更加完善。