PGzxc的博客

纸上得来终觉浅 绝知此事要躬行

0%

C#开发之——更新数据库(15.10)

一 概述

  • 在C#语言中使用DataSet类更新数据库中的数据,还需要使用System.Data.SqlClient命名空间中的SqlCommandBuilder类自动生成SqlDataAdapter对象的添加、修改以及删除方法
  • 在与SqlDataAdapter类联用时,只需要在创建SqlCommandBuilder类的实例时使用SqlDataAdapter对象作为参数即可,语法形式如下:
    1
    SqlCommandBuilder 对象名 = new SqlCommandBuilder(SqlDataAdapter 类的对象 );

二 实例

下面通过实例来演示如何使用 DataSet 更新数据库

2.1 实例一 使用 DataSet 实现用户注册功能

2.1.1 界面布局

2.1.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//注册按钮的单击事件
private void button1_Click(object sender, EventArgs e)
{
//数据库连接串
string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=root";
//创建SQLConnection的实例
SqlConnection conn = null;
try
{
conn = new SqlConnection(connStr);
//打开数据库连接
conn.Open();
string sql = "select * from userinfo";
//创建SqlDataAdapter类的对象
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
//创建DataSet类的对象
DataSet ds = new DataSet();
//使用SQLDataAdapter对象sda将查询结果填充到DataTable对象ds中
sda.Fill(ds);
//创建SqlCommandBuilder类的对象
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sda);
//创建DataRow类的对象
DataRow dr = ds.Tables[0].NewRow();
//设置name列的值
dr["name"] = textBox1.Text;
//设置password列的值
dr["password"] = textBox2.Text;
//向DataTable对象中添加一行
ds.Tables[0].Rows.Add(dr);
//更新数据库
sda.Update(ds);
MessageBox.Show("注册成功!");
}
catch(Exception ex)
{
MessageBox.Show("注册失败!"+ex.Message);
}
finally
{
if (conn != null)
{
//关闭数据库连接
conn.Close();
}
}
}

2.1.3 效果图

2.1.4 说明

运行该窗体,输入用户名和密码,单击“注册”按钮后即可将用户信息添加到数据表中
将上述代码中的 DataSet 类换成 DataTable 类也能完成同样的功能,并可以简化代码
使用 DataTable 类完成上面的功能,将 DataSet 替换成 DataTable 的部分代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//创建 DataTable 类的对象
DataTable dt=new DataTable();
//使用 SqlDataAdapter 对象 sda 将查询结果填充到 DataTable 对象 dt 中
sda.Fill(dt);
//创建 SqlCommandBuilder 类的对象
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sda);
/ /创建 DataRow 类的对象
DataRow dr=dt.NewRow();
//设置name列的值
dr["name"] = txtName.Text;
//设置password列的值
dr["password"] = txtPwd.Text;
//向DataTable对象中添加一行
dt.Rows.Add(dr);
//更新数据库
sda.Update(dt)

2.2 实例二 使用 DataSet 实现更改用户密码的功能

2.2.1 界面布局

2.2.2 功能代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//确认按钮的单击事件
private void button1_Click(object sender, EventArgs e)
{
//数据库连接串
string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=root";
//创建SQLConnection的实例
SqlConnection conn = null;
try
{
conn = new SqlConnection(connStr);
//打开数据库连接
conn.Open();
string sql = "select * from userinfo where name='{0}' and password='{1}'";
//填充SQL语句
sql = string.Format(sql, textBox1.Text, textBox2.Text);
//创建SqlDataAdapter类的对象
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
//创建DataSet类的对象
DataSet ds = new DataSet();
//使用SQLDataAdapter对象sda将查询结果填充到DataTable对象ds中
sda.Fill(ds);
if (ds.Tables[0].Rows.Count == 1)
{
//判断新密码不能为空,以及判断两次输入的密码一致
if (!"".Equals(textBox3.Text) && textBox3.Text.Equals(textBox4.Text))
{
//创建SqlCommandBuilder类的对象
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sda);
//创建DataRow类的对象
DataRow dr = ds.Tables[0].Rows[0];
//设置password列的值
dr["password"] = textBox3.Text;
//更新数据库
sda.Update(ds);
//更新DataSet对象中的数据
ds.Tables[0].AcceptChanges();
MessageBox.Show("密码修改成功!");
}
else
{
MessageBox.Show("新密码为空或者两侧输入的密码不一致!");
}
}
}
catch(Exception ex)
{
MessageBox.Show("密码修改失败!"+ex.Message);
}
finally
{
if (conn != null)
{
//关闭数据库连接
conn.Close();
}
}
}

2.2.3 效果图

2.2.4 说明

从上面的运行效果可以看出密码修改成功,也可以在数据库中查看用户信息表 (userinfo) 的数据验证密码是否被修改

如果需要通过 DataSet 删除数据表中的数据,则使用以下代码即可。

1
2
3
4
5
6
//删除 DataTable 中的指定行,ds代表DataSet对象
ds.Tables[0].Rows[ 行数 ].Delete();
//更新数据库,sda代表SqlDataAdapter对象
sda.Update(ds);
//更新DataSet对象中的数据
ds.Tables[0] .AcceptChanges();