0%

C#简易电影记录管理系统:开发二[增删改查]

本期概述

上一期我们学习并实现了用户登录功能.这一期我们一起来学习下电影记录管理系统的的最主要功能(对数据的增删改查).

新增数据表

首先我们需要在之前的数据库Movie中创建一个Record数据表,用于存储我们需要操作的电影记录数据,这里Id需要设置为自动增长(如图).

img

创建完数据表后,我们需要手动插入一些数据.

img

数据库创建完成后,开始实施系统界面.

界面设计

窗体name: FrmManager

文本框 电影名称name:txtMovie 导演name:txtDirector 发型日期name:txtDate

按钮 查看记录name:btnView 删除记录name:btnDelete 添加记录name:btnAdd 保存记录name:btnSave

img

其中DataGridView 设计 name:dgvManager

img

创建DataGridView里的列

编辑datagridview里的页眉名称(HeadText),字段属性名称(DataPropertyName)和name, name可以随便写,只要每列的name不一样就行.

这里给出我的设置: 编号项 name:Id DataPropertyName: Id HeaderText: 编号

img

DataPropertyName 是指Sql Sever数据库里的字段名(列名),所以必须跟数据库里的字段名相同.

img

HeadText为显示在DataGridView界面上的页眉名.

img

编号列

name:Id DataPropertyName: Id HeaderText: 编号

img

电影名称列

name:Movie_Name DataPropertyName:Movie_Name HeaderText: 电影名称

img

导演列

name:Movie_Director DataPropertyName:Movie_Director HeaderText: 导演

img

发行日期列

name:Date_Released DataPropertyName:Date_Released HeaderText: 发行日期

img

设置完DataGridView中的列后 我们运行下看看

img

系统默认鼠标选中模式为单元格选中,为了方便我们接下来的操作,我们把选中模式改为全行选中.

img

查看效果

img

界面和数据库完成后,我们便开始写主程序代码.

增-添加记录 (添加一条新记录)

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
//添加数据
private void btnAdd_Click(object sender, EventArgs e)
{
//定义一个初始值n=0, 用于判断后期是否成功插入数据
int n = 0;
string sql = "insert into Record(Movie_Name,Movie_Director,Date_Released) values (@Movie_Name,@Movie_Director,@Date_Released)";
//判断插入的数据是否为空,如果为空,则提示重新插入!
if (txtMovie.Text.Trim() == "" || txtDirector.Text.Trim() == "" || txtDate.Text.Trim() == "")
{
MessageBox.Show("插入数据不能为空,请按要求插入数据!");
return;
}
//向数据库插入参数
SqlParameter[] param ={
new SqlParameter("@Movie_Name",txtMovie.Text),
new SqlParameter("@Movie_Director",txtDirector.Text),
new SqlParameter("@Date_Released",Convert.ToDateTime(txtDate.Text))

};
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
cmd.Parameters.AddRange(param);
n = cmd.ExecuteNonQuery();
if (n == 0)
{
MessageBox.Show("添加失败!");
return;
}
else if (n > 0)
{
MessageBox.Show("添加成功!");
}
conn.Close();
//调用refresh方法,在添加完成数据后 自动刷新 显示新数据
Refresh(true);
}

删-删除记录 (删除已有记录)

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
//删除数据
private void btnDelete_Click(object sender, EventArgs e)
{
//使用sql删除语句
string sql = "delete from Record where 1=1";
//如果datagridview的当前行被选中
if (dgvManager.CurrentRow.Selected)
{
//将sql语句 delete from Record where 1=1 + and Id = + 当前选中行的第0个单元格的号码(即Id号)
sql = sql + "and Id=" + Convert.ToInt32(dgvManager.CurrentRow.Cells[0].Value.ToString());
}
int n = 0;
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
n = cmd.ExecuteNonQuery();
if (n == 0)
{
MessageBox.Show("不存在的ID!");
return;

}
else if (n > 0)
{
MessageBox.Show("删除成功!");
}
conn.Close();
//删除完后 刷新一下当前数据
Refresh();
}

改-保存记录 (修改一条记录)

1.在写保存记录代码之前,我们需要将DataGridView里的数据显示在文本框中,以便我们修改.

双击DataGridView控件,然后添加如下代码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//将鼠标点击的datagridview 上的行内容传递给 文本框
private void dgvManager_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//获取字段名为Movie_Name的单元格内容
txtMovie.Text = dgvManager.Rows[e.RowIndex].Cells["Movie_Name"].Value.ToString();
//同理 获取当前点击行里的 name属性为Movie_Director的单元格 获取并将其传至txtDirector 文本框
txtDirector.Text = dgvManager.Rows[e.RowIndex].Cells["Movie_Director"].Value.ToString();
//new一个时间对象 目的是将电影发行时间的小时,分和秒给去掉 保留到最小单位为日
DateTime datetoDay = new DateTime().Date;
//将当前行的日期单元格的值 赋给 时间对象datetoDay
datetoDay = Convert.ToDateTime(dgvManager.Rows[e.RowIndex].Cells["Date_Released"].Value);
//通过ToShortDateString()方法 将日期后的00:00:00 给剔除掉 并赋给 txtDate文本框
txtDate.Text = datetoDay.ToShortDateString();
}

这样当我们点击DataGridView控件中的任意一行,可以看到里面的内容被传递给了文本框.

img

然后直接在文本框中进行记录修改,通过点击 保存记录 按钮进行记录修改(代码如下).

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
//更新数据操作
private void btnSave_Click(object sender, EventArgs e)
{
//在对数据进行修改之前 对文本框的内容做一下检查, 如果为空 则提示重新输入
if (txtMovie.Text.Trim() == "" || txtDirector.Text.Trim() == "" || txtDate.Text.Trim() == "")
{
MessageBox.Show("文本框的输入不能为空!");
return;
}
//使用SQL update 更新语句
//获取文本框中输入的内容, 通过Id进行更新(Id为当前鼠标点击行的Id)
string sqlUpdate = "update Record set Movie_Name ='" + txtMovie.Text + "',Movie_Director ='"
+ txtDirector.Text + "',Date_Released='" + txtDate.Text +
"'where Id='" + dgvManager.CurrentRow.Cells[0].Value.ToString() + "'";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmdUpdate = new SqlCommand(sqlUpdate, conn);
conn.Open();
int n = cmdUpdate.ExecuteNonQuery();
if (n == 0)
{
//提示更新失败
MessageBox.Show("更新失败!");
return;// 并且返回
}
else if (n > 0)
{
//否则更新成功
MessageBox.Show("恭喜你!更新成功!");
}
//执行完数据更新操作后 需要关闭数据库 节省资源
conn.Close();
//更新完以后 调用刷新方法,将更新后的数据 显示在datagridview上面
Refresh();
}

查-查看记录 (查看当前所有记录)

1
2
3
4
5
6
7
8
9
10
11
//查看并刷新所有数据
private void btnView_Click(object sender, EventArgs e)
{
string sql = "select Id,Movie_Name,Movie_Director,Date_Released from Record";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sql, conn);
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
dgvManager.DataSource = dt;
}

代码写好了, 也许会有人说, 很多数据库操作代码, 出现了重复,显得很难看; 的确,我们可以将那些重复的部分分离出来,写个SQLHelper类包含这些方法; 然后在需要数据操作的地方,调用相应的方法, 这样既节省了代码量, 又美观,一举两得.

这里给出我的 增删改 和 查 的方法,调用的时候传入相应的 参数 即可, 具体怎么用这里就不讲了.

执行增删改方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;

static SqlConnection conn = new SqlConnection(connStr);
/// <summary>
/// ExcuteNonQuery 用于执行增删改方法
/// </summary>
/// <param name="strSql">增删改Sql语句</param>
/// <param name="paras">Sql参数数组</param>
/// <returns>返回一个整数值,用于判断是否操作成功</returns>
public static int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
{
SqlCommand cmd = new SqlCommand(strSql, conn); //执行sql指令 外面调用需传入2个参数 Sql查询语句和 Sql连接
cmd.Parameters.AddRange(paras); //添加 查询语句执行的参数数组
conn.Open(); //执行前 需打开数据库连接
int n = cmd.ExecuteNonQuery(); //执行 cmd指令操作 返回成功操作的行数
conn.Close(); //用完关闭数据库 节约资源
return n; //返回成功操作的行数
}

执行查方法

1
2
3
4
5
6
7
8
9
10
11
12
13
/// <summary>
/// ExecuteDataTable 用于执行 查 方法
/// </summary>
/// <param name="strSql">Sql Select语句</param>
/// <returns>返回 查询结果表</returns>
public static DataTable ExecuteDataTable(string strSql)
{
SqlCommand cmd = new SqlCommand(strSql, conn); //执行sql指令 外面调用需传入2个参数 Sql查询语句和 Sql连接
SqlDataAdapter da = new SqlDataAdapter(cmd); //使用SqlDataAdapter数据适配器来加载cmd操作指令
DataTable dt = new DataTable(); //创建 DataTable
da.Fill(dt); //将SqlDataAdapter 获取的结果集 填充到 DataTable中
return dt; //返回 DataTable
}

微软对SQLServer数据库操作提供了非常好的数据操作类SQLHelper.cs [详情可以看这里]

这样,我们的主程序的增删改查就做好了;下一起我们将一起学习下电影记录管理系统的密码修改功能,敬请期待.

附上源代码

MovieRecordManagementSystem02.zip

转自:https://www.cnblogs.com/longwu/archive/2011/09/24/2188331.html