zoukankan      html  css  js  c++  java
  • 数据库操作是sql的操作1

    项目过来以后,

    先肯定是做UI ,

    1.在UI层先加载

    2数据来源在dal层,

    3再到model层,得到属性

    1   public int MId { get; set; }
    2         public string MName { get; set; }
    3         public string MPwd { get; set; }
    4         public int MType { get; set; } 

    4再到dal这时候有属性了 做查询

     1 //步骤
     2 1.构造sql 语句
     3 //1构造要查询的sql语句
     4             string sql = "select * from ManagerInfo";
     5             //2使用helper进行查询,得到结果
     6             DataTable dt = SqliteHelper.GetDataTable(sql);
     7             //3将dt中的数据转存到list中
     8             List<ManagerInfo> list=new List<ManagerInfo>();
     9            //4触发器
    10             foreach (DataRow row in dt.Rows)
    11             {
    12                 list.Add(new ManagerInfo()
    13                 {
    14                     MId = Convert.ToInt32(row["mid"]),
    15                     MName = row["mname"].ToString(),
    16                     MPwd = row["mpwd"].ToString(),
    17                     MType = Convert.ToInt32(row["mtype"])
    18                 });
    19             }
    20             //将集合返回
    21             return list;

    5.得到数据后到Bll 层进行调用

     //1创建数据层对象
            ManagerInfoDal miDal = new ManagerInfoDal();
            //2.因为要在UI层进行得到表格所有要定义GetList
            public List<ManagerInfo> GetList()
            {
                //调用查询方法
                return miDal.GetList();

    6.得到GetList后,然后到UI层进行数据加载

    
    

        /1/创建业务逻辑层对象
       ManagerInfoBll miBll = new ManagerInfoBll();



    1
    private void FormManagerInfo_Load(object sender, EventArgs e) 2 { 3 //2加载列表 4 LoadList(); 5 } 6 7 private void LoadList() 8 { 9 //禁用列表的自动生成 10 dgvList.AutoGenerateColumns = false; 11 //3调用方法获取数据,绑定到列表的数据源上 12 dgvList.DataSource = miBll.GetList(); 13 }

    7.链接数据库 再写配置文件

     1 <connectionStrings> 2 <add name="itcastCater" connectionString="data source=C:Usersq1DesktopItcastCater.db;version=3;"/> 3 </connectionStrings> 

    注意点,其必须每个类都是 partial


    增加

    按理说先写model ,但是model 已经有了

    所有

    1.从dll层开始写

     1      /// <summary>
     2         /// 插入数据
     3         /// </summary>
     4         /// <param name="mi">ManagerInfo类型的对象</param>
     5         /// <returns></returns>
     6         public int Insert(ManagerInfo mi)
     7         {
     8             //1.构造insert语句
     9             string sql = "insert into ManagerInfo(mname,mpwd,mtype) values(@name,@pwd,@type)";
    10             //2.构造sql语句的参数
    11             SQLiteParameter[] ps = //使用数组初始化器
    12             {
    13                 new SQLiteParameter("@name", mi.MName),
    14                 new SQLiteParameter("@pwd", Md5Helper.EncryptString(mi.MPwd)),//将密码进行md5加密
    15                 new SQLiteParameter("@type", mi.MType)
    16             };
    17             //3.执行插入操作
    18             return SqliteHelper.ExecuteNonQuery(sql, ps);
    19         }

    2.到bll 层 1 public bool Add(ManagerInfo mi) 2

    { 3 //调用dal层的insert方法,完成插入操作

    4 return miDal.Insert(mi) > 0; 5 } 

    3.到UI层 由于此时添加同时也有修改添加的左右所有

      private void btnSave_Click(object sender, EventArgs e)
            {
                //1接收用户输入
                ManagerInfo mi = new ManagerInfo()
                {
                    MName = txtName.Text,
                    MPwd = txtPwd.Text,
                    MType = rb1.Checked ? 1 : 0 //经理值为1,店员值为0
                };
                if (txtId.Text.Equals("添加时无编号"))//添加逻辑没有这个
                {
                    #region 添加
                    //调用bll的Add方法
                    if (miBll.Add(mi))
                    {
                        //如果添加成功,则重新加载数据
                        LoadList();
                    }
                    else
                    {
                        MessageBox.Show("添加失败,请稍候重试");
                    }
    
                    #endregion
                }
                else
                {
                    #region 修改
    
                    mi.MId = int.Parse(txtId.Text);
                    if (miBll.Edit(mi))
                    {
                        LoadList();
                    }
    
                    #endregion
                }
    
                //清除文本框中的值
                txtName.Text = "";
                txtPwd.Text = "";
                rb2.Checked = true;
                btnSave.Text = "添加";
                txtId.Text = "添加时无编号";
            }

    在这个时候.要判断类型,是经理还是店员要进行格式化,  e.Value = Convert.ToInt32(e.Value) == 1 ? "经理" : "店员";

    1.在dal里面

       /// <summary>
            /// 修改管理员,特别注意:密码
            /// </summary>
            /// <param name="mi"></param>
            /// <returns></returns>
            public int Update(ManagerInfo mi)
            {
                //为什么要进行密码的判断:
                //答:因为密码值是经过md5加密存储的,当修改时,需要判断用户是否改了密码,如果没有改,则不变,如果改了,则重新进行md5加密
    
                //定义参数集合,可以动态添加元素
                List<SQLiteParameter> listPs=new List<SQLiteParameter>();
                //构造update的sql语句
                string sql = "update ManagerInfo set mname=@name";
                listPs.Add(new SQLiteParameter("@name",mi.MName));
                //判断是否修改密码
                if (!mi.MPwd.Equals("这是原来的密码吗"))
                {
                    sql += ",mpwd=@pwd";
                    listPs.Add(new SQLiteParameter("@pwd",Md5Helper.EncryptString(mi.MPwd)));
                }
                //继续拼接语句
                sql+=",mtype=@type where mid=@id";
                listPs.Add(new SQLiteParameter("@type",mi.MType));
                listPs.Add(new SQLiteParameter("@id",mi.MId));
                
                //执行语句并返回结果
                return SqliteHelper.ExecuteNonQuery(sql, listPs.ToArray());
            }

    再到Bll层

    public bool Edit(ManagerInfo mi)
    {
    return miDal.Update(mi) > 0;
    }

     删除

    1.先到Dal层

     1   /// <summary>
     2         /// 根据编号删除管理员
     3         /// </summary>
     4         /// <param name="id"></param>
     5         /// <returns></returns>
     6         public int Delete(int id)
     7         {
     8             //1构造删除的sql语句
     9             string sql = "delete from ManagerInfo where mid=@id";
    10             //2根据语句构造参数
    11             SQLiteParameter p=new SQLiteParameter("@id",id);
    12             //3执行操作
    13             return SqliteHelper.ExecuteNonQuery(sql, p);
    14         }

    在到bll层

    public bool Remove(int id)
    {
    return miDal.Delete(id) > 0;


    }

    在到UI层

     1   private void btnRemove_Click(object sender, EventArgs e)
     2         {
     3             //获取选中的行
     4             var rows = dgvList.SelectedRows;
     5             if (rows.Count > 0)
     6             {
     7                 //删除前的确认提示
     8                 DialogResult result= MessageBox.Show("确定要删除吗?", "提示", MessageBoxButtons.OKCancel);
     9                 if (result == DialogResult.Cancel)
    10                 {
    11                     //用户取消删除
    12                     return;
    13                 }
    14 
    15                 //获取选中行的编号
    16                 int id = int.Parse(rows[0].Cells[0].Value.ToString());
    17                 //调用删除的操作
    18                 if (miBll.Remove(id))
    19                 {
    20                     //删除成功,重新加载数据
    21                     LoadList();
    22                 }
    23             }
    24             else
    25             {
    26                 MessageBox.Show("请先选择要删除的行");
    27             }
    28         }
  • 相关阅读:
    python爬虫之urllib库(三)
    python爬虫之urllib库(二)
    认识CSS中css引入方式、选择器、文本样式设置以及显示模式
    认识CSS中盒子模型
    python爬虫之urllib库(一)
    认识CSS中css背景样式设置
    python爬虫之认识爬虫和爬虫原理
    认识CSS中css的三大特性:层叠性、继承性以及优先级
    认识HTML中表格、列表标签以及表单控件
    python-基础学习篇(八)
  • 原文地址:https://www.cnblogs.com/liuweiqiang11188/p/6682547.html
Copyright © 2011-2022 走看看