為了體現面向對象的思想,我們把“增刪改查”這些函數封裝到一個數據庫操作類里;
為了便於窗體程序與數據庫之間進行數據交互,我們建一個具有數據庫行數據的類,通過它方便的在窗體程序與數據庫之間傳輸數據;
我們新建一個文件夾,把這兩個類放在這個文件夾(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();
}














