zoukankan      html  css  js  c++  java
  • ADO.NET – 3.书籍管理系统详解

    内容提要:

    1.先写应用程序配置文件app.config

    2.创建SQLHelper.cs

    3.加载Form的load事件

    4.搜索事件

    5.点击书籍列表显示具体数据

        5.1先修改为全行选中

        5.2事件dgv_Books_CellClick(object sender, DataGridViewCellEventArgs e)

            :选中一行,下面显示具体数据

    6.新增

    7.修改

    8.删除

    9.退出

    效果图:

    image

     

    1.先写应用程序配置文件app.config

    app.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="conStr" connectionString="Server=.\SQLEXPRESS;database=tangsansan;uid=sa;pwd=sa" />
      </connectionStrings>
    </configuration>

     

    2.创建SQLHelper.cs

    SQlHepler.cs
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Configuration;
     6 using System.Data;
     7 using System.Data.SqlClient;
     8 
     9 
    10 namespace BMS
    11 {
    12     public static class SQLHelper
    13     {
    14         private static string conStr = ConfigurationManager.
    15             ConnectionStrings["conStr"].ConnectionString;
    16 
    17         private static SqlConnection conn;
    18 
    19         //连接通道 属性
    20         #region 连接通道 属性
    21         public static SqlConnection Conn
    22         {
    23             get
    24             {
    25                 if (conn == null || conn.State == ConnectionState.Broken)
    26                 {
    27                     conn = new SqlConnection(conStr);
    28                 }
    29                 return conn;
    30             }
    31         }
    32         #endregion
    33         /// <summary>
    34         /// 获取数据表
    35         /// </summary>
    36         /// <param name="sqlStr">查询语句</param>
    37         /// <param name="paras">参数数组</param>
    38         /// <returns>结果表</returns>
    39         public static DataTable GetDataTable(string sqlStr, params SqlParameter[] paras)
    40         {
    41             SqlCommand cmd = new SqlCommand(sqlStr, Conn);
    42             if (paras.Length > 0)
    43             {
    44                 cmd.Parameters.AddRange(paras);
    45             }
    46             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    47             DataTable dt = new DataTable();
    48             try
    49             {
    50                 adapter.Fill(dt);
    51             }
    52             catch (Exception ex)
    53             {
    54 
    55                 throw ex;
    56             }
    57             return dt;
    58         }
    59         /// <summary>
    60         /// 执行SQL
    61         /// </summary>
    62         /// <param name="sql"></param>
    63         /// <param name="parameters"></param>
    64         /// <returns></returns>
    65         public static int ExecNonQuery(string sql, SqlParameter[] parameters)
    66         {
    67 
    68             using (SqlCommand cmd = new SqlCommand(sql, conn))
    69             {
    70                 if (parameters.Length > 0 && parameters != null)
    71                 {
    72                     cmd.Parameters.AddRange(parameters);
    73                 }
    74                 conn.Open();
    75                 int res = 0;
    76                 try
    77                 {
    78                     res = cmd.ExecuteNonQuery();
    79                 }
    80                 catch (Exception e)
    81                 {
    82                     throw e;
    83                 }
    84                 finally
    85                 {
    86                     conn.Close();
    87                 }
    88                 return res;
    89             }          
    90         }
    91     }
    92 }

     

    3.加载Form的load事件

    显示行号 复制代码 Form_load事件
    1.         //窗体加载事件
      
    2.         private void Form1_Load(object sender, EventArgs e)
      
    3.       {
      
    4.           LoadBooks();
      
    5.           LoadCategory();
      
    6.       }
      
    7. 
      

            /// <summary>
            /// 加载dgv_Books:(dategridview列表)
            /// </summary>
            private void LoadBooks()
            {
                string sqlStr = "select b_Id,c_name,b_title,b_content,b_author,b_isdel,b_addtime,b_money,b_submoney " +
                                "from Book inner join Category on b_Cid = c_id where b_isdel = 0";
                DataTable dt = SQLHelper.GetDataTable(sqlStr);
                dgv_Books.DataSource = dt;
            }
     
            /// <summary>
            /// 加载cb_Cate:(书籍类别)
            /// </summary>
            private void LoadCategory()
            {
                string sqlStr = "select * from Category where c_isdel=0";
                DataTable dt = SQLHelper.GetDataTable(sqlStr);
                foreach (DataRow dr in dt.Rows)
                {
                    Category model = new Category();
                    if (dr["c_id"] != null)
                    {
                        model.Cid = Convert.ToInt32(dr["c_id"]);
                    }
                    model.CName = dr["c_Name"].ToString();
                    model.CRemark = dr["c_remark"].ToString();
                    model.CIsdel = bool.Parse(dr["c_isdel"].ToString());
                    model.CAddtime = Convert.ToDateTime(dr["c_addtime"].ToString());
                    model.CParentId = int.Parse(dr["c_parentId"].ToString());
                    cb_Cate.Items.Add(model);
                }
                cb_Cate.DisplayMember = "CName";
                cb_Cate.ValueMember = "Cid";
                cb_Cate.SelectedIndex = 0;
            }
     

     

    4.搜索事件

    image

            private void btn_Serch_Click(object sender, EventArgs e)
            {
                //获得关键字文本框的文本内容
                string txtkey = this.txt_key.Text.Trim();
     
                //获取下拉框选中项,转成Category,获取类别ID
                int cate = ((Category)cb_Cate.SelectedItem).Cid;
     
                string sqlStr = "select b_Id,c_name,b_title,b_content,b_author,b_isdel,b_addtime,b_money,b_submoney " +
                                "from Book inner join Category on b_Cid = c_id where b_cid=@cid";
                //如果关键字不为空
                if (!string.IsNullOrEmpty(txtkey))
                {
                    sqlStr += string.Format(" and b_title like '%{0}%'", txtkey);
                }
     
                //得到@cid的值
                SqlParameter sq =new SqlParameter("@cid",SqlDbType.Int,4);
                sq.Value = cate;
     
                //绑定dgv
                DataTable dt = SQLHelper.GetDataTable(sqlStr,sq);
                dgv_Books.DataSource = dt;
            }
     

     

    5.点击书籍列表显示具体数据

     

        5.1先修改为全行选中

    image

        5.2事件dgv_Books_CellClick(object sender, DataGridViewCellEventArgs e)

    :选中一行,下面显示具体数据

    image

             //书籍列表的单元格点击事件
             private void dgv_Books_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                int rowindex = e.RowIndex;
                //ID
                string bid = dgv_Books.Rows[rowindex].Cells[0].Value.ToString();
                lab_ID.Text = bid;
                //书名:txt_title
                string title = dgv_Books.Rows[rowindex].Cells[2].Value.ToString();
                txt_title.Text = title;
                //内容:txt_Content
                string content = dgv_Books.Rows[rowindex].Cells[3].Value.ToString();
                txt_Content.Text = content;
                //作者:txt_author
                string author = dgv_Books.Rows[rowindex].Cells[4].Value.ToString();
                txt_author.Text = author;
                //SelectedItem选择的是Item添加cb_Cate.Items.Add的值
                  //如果绑定的datasource,SelectedValue选择的是cb_bookcate.ValueMember的值
                  //Cells[9]是c_id的值,一般选择隐藏
                  cb_bookcate.SelectedValue = dgv_Books.Rows[rowindex].Cells[9].Value.ToString();
            }
     

    效果图:

    image

     

    6.新增

            #region 新增
            private void btn_Add_Click(object sender, EventArgs e)
            {
                string title = this.txt_title.Text.Trim();
                string author = this.txt_author.Text.Trim();
                string bCid = this.cb_bookcate.SelectedValue.ToString();
                string content = txt_Content.Text.Trim();
     
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into book(");
                strSql.Append("b_Cid,b_title,b_content,b_author)");
                strSql.Append(" values (");
                strSql.Append("@b_Cid,@b_title,@b_content,@b_author)");
                strSql.Append(";select @@IDENTITY");
                SqlParameter[] parameters =
                    {
                        new SqlParameter("@b_Cid", SqlDbType.Int, 4),
                        new SqlParameter("@b_title", SqlDbType.VarChar, 200),
                        new SqlParameter("@b_content", SqlDbType.VarChar, 200),
                        new SqlParameter("@b_author", SqlDbType.VarChar, 200)
                    };
                parameters[0].Value = bCid;
                parameters[1].Value = title;
                parameters[2].Value = content;
                parameters[3].Value = author;
                int res = SQLHelper.ExecNonQuery(strSql.ToString(), parameters);
                //执行成功则刷新列表
                if (res > 0)
                {
                    LoadBooks();
                    MessageBox.Show("新增成功!");
                }
                else
                {
                    MessageBox.Show("新增失败!");
                }
            } 
            #endregion
    
    

     

    7.修改

     
            #region 修改
     
            private void btn_Update_Click(object sender, EventArgs e)
            {
                string bId = this.lab_ID.Text;
                string title = this.txt_title.Text.Trim();
                string author = this.txt_author.Text.Trim();
                string bCid = this.cb_bookcate.SelectedValue.ToString();
                string content = txt_Content.Text.Trim();
     
                string sqlStr = string.Format("update book set b_title=@title," +
                                              "b_content=@content,b_author=@author,b_cid=@cid" +
                                              " where b_id=@bid");
                SqlParameter[] parameters =
                    {
                        new SqlParameter("@title", SqlDbType.VarChar, 200),
                        new SqlParameter("@content", SqlDbType.VarChar, 200),
                        new SqlParameter("@author", SqlDbType.VarChar, 200),
                        new SqlParameter("@cid", SqlDbType.Int, 4),
                        new SqlParameter("@bid", SqlDbType.Int, 4),
                    };
                //为参数数组中的每个参数赋值
                parameters[0].Value = title;
                parameters[1].Value = content;
                parameters[2].Value = author;
                parameters[3].Value = bCid;
                parameters[4].Value = bId;
                int res = SQLHelper.ExecNonQuery(sqlStr, parameters);
                //执行成功则刷新列表
                if (res>0)
                {
                    LoadBooks();
                    MessageBox.Show("修改成功!");
                }
                else
                {
                    MessageBox.Show("修改不成功!");
                }
            }
            #endregion
    
    

     

    8.删除

    private void btn_Del_Click(object sender, EventArgs e)
     {
         string bId = this.lab_ID.Text;
         StringBuilder strSql = new StringBuilder();
         strSql.Append("delete from book ");
         strSql.Append(" where b_id=@cid");
         SqlParameter[] parameters = {
                 new SqlParameter("@cid", SqlDbType.Int,4)
         };
         parameters[0].Value = bId;
         int res = SQLHelper.ExecNonQuery(strSql.ToString(), parameters);
         //执行成功则刷新列表
         if (res > 0)
         {
             LoadBooks();
             MessageBox.Show("删除成功!");
         }
         else
         {
             MessageBox.Show("删除失败!");
         }
     }
     

     

    9.退出

    //退出
    private void btn_Out_Click(object sender, EventArgs e)
    {
        //this.Close();
        //只是关闭了当前窗口,若不是主窗体的话,是无法退出整个程序的,
        //另外若有托管线程(非主线程)如指针之类的,也无法干净地退出。
     
    
    
        //Application.Exit();
        //强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出。
     
    
    
        //Application.ExitThread();
        //强制中止调用线程上的所有消息,无法控制多线程正确退出的问题;
     
    
    
        //System.Environment.Exit(0);
        //这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
     
    
    
        System.Environment.Exit(System.Environment.ExitCode);
        //所以在程序中需要强制退出的地方加上System.Environment.Exit(System.Environment.ExitCode);  
        //还有一种方法:  System.Threading.Thread.CurrentThread.Abort(); 
        //或者  Process.GetCurrentProcess().Kill() 
        //或者  Application.ExitThread(); 
        //或者  Application.ExitThread()
    }
     
  • 相关阅读:
    .NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记
    .NET Core开发实战(第9课:命令行配置提供程序)--学习笔记
    .NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记
    .NET Core开发实战(第7课:用Autofac增强容器能力)--学习笔记(下)
    .NET Core开发实战(第7课:用Autofac增强容器能力)--学习笔记(上)
    .NET Core开发实战(第6课:作用域与对象释放行为)--学习笔记(下)
    .NET Core开发实战(第6课:作用域与对象释放行为)--学习笔记(上)
    .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)
    .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(中)
    .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)
  • 原文地址:https://www.cnblogs.com/tangge/p/2739068.html
Copyright © 2011-2022 走看看