C#简易电影记录管理系统:开发二[增删改查]
本期概述
上一期我们学习并实现了用户登录功能.这一期我们一起来学习下电影记录管理系统的的最主要功能(对数据的增删改查).
新增数据表
首先我们需要在之前的数据库Movie中创建一个Record数据表,用于存储我们需要操作的电影记录数据,这里Id需要设置为自动增长(如图).
创建完数据表后,我们需要手动插入一些数据.
数据库创建完成后,开始实施系统界面.
界面设计
窗体name: FrmManager
文本框 电影名称name:txtMovie 导演name:txtDirector 发型日期name:txtDate
按钮 查看记录name:btnView 删除记录name:btnDelete 添加记录name:btnAdd 保存记录name:btnSave
其中DataGridView 设计 name:dgvManager
创建DataGridView里的列
编辑datagridview里的页眉名称(HeadText),字段属性名称(DataPropertyName)和name, name可以随便写,只要每列的name不一样就行.
这里给出我的设置: 编号项 name:Id DataPropertyName: Id HeaderText: 编号
DataPropertyName 是指Sql Sever数据库里的字段名(列名),所以必须跟数据库里的字段名相同.
HeadText为显示在DataGridView界面上的页眉名.
编号列
name:Id DataPropertyName: Id HeaderText: 编号
电影名称列
name:Movie_Name DataPropertyName:Movie_Name HeaderText: 电影名称
导演列
name:Movie_Director DataPropertyName:Movie_Director HeaderText: 导演
发行日期列
name:Date_Released DataPropertyName:Date_Released HeaderText: 发行日期
设置完DataGridView中的列后 我们运行下看看
系统默认鼠标选中模式为单元格选中,为了方便我们接下来的操作,我们把选中模式改为全行选中.
查看效果
界面和数据库完成后,我们便开始写主程序代码.
增-添加记录 (添加一条新记录)
//添加数据 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); }
删-删除记录 (删除已有记录)
//删除数据 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控件,然后添加如下代码.
//将鼠标点击的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控件中的任意一行,可以看到里面的内容被传递给了文本框.
然后直接在文本框中进行记录修改,通过点击 保存记录 按钮进行记录修改(代码如下).
//更新数据操作 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(); }
查-查看记录 (查看当前所有记录)
//查看并刷新所有数据 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类包含这些方法; 然后在需要数据操作的地方,调用相应的方法, 这样既节省了代码量, 又美观,一举两得.
这里给出我的 增删改 和 查 的方法,调用的时候传入相应的 参数 即可, 具体怎么用这里就不讲了.
执行增删改方法
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; //返回成功操作的行数 }
执行查方法
/// <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
相关推荐 [点此查看目录]
作者:SilverSky(SoFlash)
出处:http://www.cnblogs.com/longwu/
欢迎学习和转载,转载请注明出处.