项目过来以后,
查
先肯定是做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 }