為了體現面向對象的思想,我們把“增刪改查”這些函數封裝到一個數據庫操作類里;
為了便於窗體程序與數據庫之間進行數據交互,我們建一個具有數據庫行數據的類,通過它方便的在窗體程序與數據庫之間傳輸數據;
我們新建一個文件夾,把這兩個類放在這個文件夾(App)里,以后,把命名空間寫上就可以使用這兩個類了。
為了便於窗體程序與數據庫之間進行數據交互,我們建一個具有數據庫行數據的類,通過它方便的在窗體程序與數據庫之間傳輸數據。
首先,建立程序的主窗體
㈠添加數據
當點擊“增加”,彈出一個子窗體,通過子窗體往數據庫中添加一條數據
private void button1_Click(object sender, EventArgs e) { Form5 insert= new Form5(); insert.Owner = this; insert.Show(); }
子窗體里的函數:
public partial class Form5 : Form { public Form5() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //將文本框中的數據存入SqlData類型的變量udata中 SqlData udata = new SqlData(); udata.Name = textBox1.Text; udata.Code = textBox2.Text; new SqlDA().addData(udata);//調用添加數據函數,添加數據udata } }
運行程序,添加數據,查看結果
㈡查詢數據
第一個查詢形式,
首先我們需要窗口一加載,就顯示出數據庫中的所有數據
首先,在存放方法的SqlDA類中,添加一個獲取數據的成員方法,該方法能返回一個數據集合
//查詢數據的方法 public List<SqlData> select() { List<SqlData> list=new List<SqlData>(); //連接數據庫,訪問數據 _cmd = _con.CreateCommand(); _con.Open(); _cmd.CommandText = "select *from users"; SqlDataReader dr= _cmd.ExecuteReader(); //將數據庫數據轉換成Sqldata類型,並放入list集合中 while (dr.Read()) { SqlData data=new SqlData(); data.Code = dr["code"].ToString(); data.Name = dr["name"].ToString(); data.Pwd = dr["pwd"].ToString(); list.Add(data); } _con.Close(); return list; }
然后定義一個綁定數據函數,該函數將上面成員方法返回的數據綁定到listview1中,顯示出來
//綁定數據函數 public void bindData(List<SqlData> list) { //構建表結構 listView1.Columns.Add("編號"); listView1.Columns.Add("用戶名"); listView1.Columns.Add("密碼"); //將集合中的數據放入listview1中 foreach (SqlData data in list) { ListViewItem it = new ListViewItem();//構建一個listviewitem對象,通過它把數據放入listview1中 it.Text = data.Code; it.SubItems.Add(data.Name); it.SubItems.Add(data.Pwd ); listView1.Items.Add(it);//將數據放入listview1的items集合中, } }
然后窗體加載事件中,追加綁定數據函數的委托
//窗體一加載,在listview1中綁定數據 private void Form4_Load(object sender, EventArgs e) { bindData(new SqlDA().select()); }
運行結果
第二個查詢形式,
在窗口中輸入用戶名,根據用戶名進行模糊查詢
首先寫一個需要參數(用戶名)的查詢函數,我們可以寫一個select的重載函數,如下
//查詢數據的方法2,需要一個字符串參數,與上面的函數構成重載 public List<SqlData> select(string uname) { List<SqlData> list = new List<SqlData>(); //連接數據庫,訪問數據 _cmd = _con.CreateCommand(); _con.Open(); _cmd.CommandText = "select *from users where name like '%"+uname+"%'"; SqlDataReader dr = _cmd.ExecuteReader(); //將訪問到的數據庫數據轉換成Sqldata類型,並放入list集合中 while (dr.Read()) { SqlData data = new SqlData(); data.Code = dr["code"].ToString(); data.Name = dr["name"].ToString(); data.Pwd = dr["pwd"].ToString(); list.Add(data); } _con.Close(); return list; }
點擊“查詢”按鈕
//通過輸入用戶名,查詢數據 private void button4_Click(object sender, EventArgs e) { listView1.Items.Clear(); bindData(new SqlDA().select(textBox1.Text)); }
㈢修改數據
首先,將主窗口的FullRowSelect屬性設為True,使行數據可選
點擊“修改”,彈出以下“修改”子窗體
修改數據不需要修改編號,將“修改”子窗體的第一個文本框的“Enabled”屬性設為false。
“修改”子窗體的代碼
public partial class Form6 : Form { public Form6() { InitializeComponent(); } //重寫修改窗口的構造函數,顯示選中項的數據 public Form6(SqlData data) { InitializeComponent(); textBox3.Text=data.Code; textBox1.Text=data.Name; textBox2.Text=data.Pwd; } private void button1_Click(object sender, EventArgs e) { //將輸入的內容轉成SqlData格式 SqlData data = new SqlData(); data.Code = textBox3.Text; data.Name = textBox1.Text; data.Pwd = textBox2.Text; //調用修改數據函數 new SqlDA().update(data); }
}
修改數據的函數
//修改數據的方法 public void update (SqlData data) { //打開連接,拼接命令 _con.Open(); _cmd = _con.CreateCommand(); _cmd.CommandText = "update users set name=@name,pwd=@pwd where code=@code"; _cmd.Parameters.Add("@name",data.Name ); _cmd.Parameters.Add("@pwd", data.Pwd); _cmd.Parameters.Add("@code", data.Code); //執行命令,關閉連接 _cmd.ExecuteNonQuery(); _con.Close(); }
將用戶名、密碼輸入后,點擊“修改”,在主窗口中點擊“查詢”,可以看到數據已修改
㈢刪除數據
//刪除數據的方法 public void delete(SqlData data) { //打開連接,拼接命令 _con.Open(); _cmd = _con.CreateCommand(); _cmd.CommandText = "delete from users where code=@code"; _cmd.Parameters.Add("@code", data.Code); //執行命令,關閉連接 _cmd.ExecuteNonQuery(); _con.Close(); }