为了体现面向对象的思想,我们把“增删改查”这些函数封装到一个数据库操作类里;
为了便于窗体程序与数据库之间进行数据交互,我们建一个具有数据库行数据的类,通过它方便的在窗体程序与数据库之间传输数据;
我们新建一个文件夹,把这两个类放在这个文件夹(App)里,以后,把命名空间写上就可以使用这两个类了。
为了便于窗体程序与数据库之间进行数据交互,我们建一个具有数据库行数据的类,通过它方便的在窗体程序与数据库之间传输数据。
首先,建立程序的主窗体
㈠添加数据
当点击“增加”,弹出一个子窗体,通过子窗体往数据库中添加一条数据
private void button1_Click(objectsender, EventArgs e)
{
Form5 insert= newForm5();
insert.Owner= this;
insert.Show();
}
子窗体里的函数:
public partial classForm5 : Form
{publicForm5()
{
InitializeComponent();
}private void button1_Click(objectsender, EventArgs e)
{//将文本框中的数据存入SqlData类型的变量udata中
SqlData udata = newSqlData();
udata.Name=textBox1.Text;
udata.Code=textBox2.Text;new SqlDA().addData(udata);//调用添加数据函数,添加数据udata
}
}
运行程序,添加数据,查看结果
㈡查询数据
第一个查询形式,
首先我们需要窗口一加载,就显示出数据库中的所有数据
首先,在存放方法的SqlDA类中,添加一个获取数据的成员方法,该方法能返回一个数据集合
//查询数据的方法
public List select()
{
List list=new List();//连接数据库,访问数据
_cmd =_con.CreateCommand();
_con.Open();
_cmd.CommandText= "select *from users";
SqlDataReader dr=_cmd.ExecuteReader();//将数据库数据转换成Sqldata类型,并放入list集合中
while(dr.Read())
{
SqlData data=newSqlData();
data.Code= dr["code"].ToString();
data.Name= dr["name"].ToString();
data.Pwd= dr["pwd"].ToString();
list.Add(data);
}
_con.Close();returnlist;
}
然后定义一个绑定数据函数,该函数将上面成员方法返回的数据绑定到listview1中,显示出来
//绑定数据函数
public void bindData(Listlist)
{//构建表结构
listView1.Columns.Add("编号");
listView1.Columns.Add("用户名");
listView1.Columns.Add("密码");//将集合中的数据放入listview1中
foreach (SqlData data inlist)
{
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(objectsender, EventArgs e)
{
bindData(new SqlDA().select());
}
运行结果
第二个查询形式,
在窗口中输入用户名,根据用户名进行模糊查询
首先写一个需要参数(用户名)的查询函数,我们可以写一个select的重载函数,如下
//查询数据的方法2,需要一个字符串参数,与上面的函数构成重载
public List select(stringuname)
{
List list = new List();//连接数据库,访问数据
_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= newSqlData();
data.Code= dr["code"].ToString();
data.Name= dr["name"].ToString();
data.Pwd= dr["pwd"].ToString();
list.Add(data);
}
_con.Close();returnlist;
}
点击“查询”按钮
//通过输入用户名,查询数据
private void button4_Click(objectsender, EventArgs e)
{
listView1.Items.Clear();
bindData(new SqlDA().select(textBox1.Text));
}
㈢修改数据
首先,将主窗口的FullRowSelect属性设为True,使行数据可选
点击“修改”,弹出以下“修改”子窗体
修改数据不需要修改编号,将“修改”子窗体的第一个文本框的“Enabled”属性设为false。
“修改”子窗体的代码
public partial classForm6 : Form
{publicForm6()
{
InitializeComponent();
}//重写修改窗口的构造函数,显示选中项的数据
publicForm6(SqlData data)
{
InitializeComponent();
textBox3.Text=data.Code;
textBox1.Text=data.Name;
textBox2.Text=data.Pwd;
}private void button1_Click(objectsender, EventArgs e)
{//将输入的内容转成SqlData格式
SqlData data = newSqlData();
data.Code=textBox3.Text;
data.Name=textBox1.Text;
data.Pwd=textBox2.Text;//调用修改数据函数
newSqlDA().update(data);
}
}
修改数据的函数
//修改数据的方法
public voidupdate (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 voiddelete(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();
}