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

新增数据表

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

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

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

腾讯云最新服务器活动--云服务器免费送。

试用领取有人能领到180天。

腾讯云领取优惠券地址

阿里云领取优惠券地址

界面设计

窗体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
}

猜你喜欢

转载自blog.csdn.net/qq_42972863/article/details/87889637