项目过来以后,

先肯定是做UI ,

1.在UI层先加载

2数据来源在dal层,

3再到model层,得到属性

   public int MId { get; set; }
public string MName { get; set; }
public string MPwd { get; set; }
public int MType { get; set; }

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

 //步骤
1.构造sql 语句
//1构造要查询的sql语句
string sql = "select * from ManagerInfo";
//2使用helper进行查询,得到结果
DataTable dt = SqliteHelper.GetDataTable(sql);
//3将dt中的数据转存到list中
List<ManagerInfo> list=new List<ManagerInfo>();
//4触发器
foreach (DataRow row in dt.Rows)
{
list.Add(new ManagerInfo()
{
MId = Convert.ToInt32(row["mid"]),
MName = row["mname"].ToString(),
MPwd = row["mpwd"].ToString(),
MType = Convert.ToInt32(row["mtype"])
});
}
//将集合返回
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加载列表
LoadList();
} private void LoadList()
{
//禁用列表的自动生成
dgvList.AutoGenerateColumns = false;
//3调用方法获取数据,绑定到列表的数据源上
dgvList.DataSource = miBll.GetList();
}

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

<connectionStrings> <add name="itcastCater" connectionString="data source=C:\Users\q1\Desktop\ItcastCater.db;version=3;"/> </connectionStrings>

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


增加

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

所有

1.从dll层开始写

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

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

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

return miDal.Insert(mi) > 0; }

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层

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

在到bll层

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

}

在到UI层

   private void btnRemove_Click(object sender, EventArgs e)
{
//获取选中的行
var rows = dgvList.SelectedRows;
if (rows.Count > 0)
{
//删除前的确认提示
DialogResult result= MessageBox.Show("确定要删除吗?", "提示", MessageBoxButtons.OKCancel);
if (result == DialogResult.Cancel)
{
//用户取消删除
return;
} //获取选中行的编号
int id = int.Parse(rows[0].Cells[0].Value.ToString());
//调用删除的操作
if (miBll.Remove(id))
{
//删除成功,重新加载数据
LoadList();
}
}
else
{
MessageBox.Show("请先选择要删除的行");
}
}

数据库操作是sql的操作1的更多相关文章

  1. sql server操作2:查询数据库语句大全【转】

    注:以下操作均建立在上篇文章sql Server操作1的数据基础之上 一.实验目的 熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询 二.实验内容和要求 使用SQL查询分析器查询数据,练 ...

  2. 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷

    原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...

  3. mysql导入导出sql文件(包括数据库和数据表的操作)

    废话不多说直接开始. 在windows命令行下登录mysql,创建一个test_01数据库,创建一个user表,并插入一条数据,如下 一.导出数据库test_01 1.退出数据库,在命令行中输入 my ...

  4. 关闭数据库下的所有连接操作 sql存储过程

    use master go )) as begin ),) declare @spid int set @sql='declare getspid cursor for select spid fro ...

  5. Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...

  6. 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作

    在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5    ,  mysq驱动jar包为mysql-connector ...

  7. 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】

    问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...

  8. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  9. Electron中使用sql.js操作SQLite数据库

    推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...

随机推荐

  1. 每天一个linux命令(3):cd命令

    版权声明 更新:2017-04-27博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下命令cd. 2 开 ...

  2. 2012年浙大:Hello World for U

    题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape ...

  3. AR/VR-VR-Info-Micron-Insight:虚拟现实开辟心理健康新途径

    ylbtech-AR/VR-VR-Info-Micron-Insight:虚拟现实开辟心理健康新途径 1.返回顶部 1. 虚拟现实开辟心理健康新途径 全国心理疾病联盟最近发表的一份报告揭示了惊人的统计 ...

  4. MYSQL学习二 关于左连接

    工作中有如下的SQL, 针对A.ID ='abcdefg', left  join  B和C两个表,来查找其他信息.就算是B和C中没有任何满足条件的记录,最后结果也肯定不是空.因为A.ID ='abc ...

  5. 演讲:对 2000 多亿条数据做一次 group by 需要多久?

    http://2017.qconbeijing.com/presentation/646?utm_source=weibo&utm_medium=infoq&utm_campaign= ...

  6. 面向对象(static关键字)

    static关键字:用于修饰成员(成员变量和成员函数) 被修饰后的成员具备以下特点: 随着类的加载而加载 优先于对象存在 被所有的对象共享 可以直接被类名调用 使用注意: 静态方法只能访问静态成员 静 ...

  7. python3+selenium使用浏览器IE的时候,无法打开IE浏览器,老是报错: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones

    python3+selenium使用浏览器IE的时候,老是报错: Unexpected error launching Internet Explorer. Protected Mode settin ...

  8. RedisDesktopManager 可视化工具提示:无法加载键:Scan..

    原因是redis的版本过低,window下的redis-cli.exe客户端输入 info 命令可看到该redis的版本,这个scan查看要redis2.80版本以上!!!!

  9. CF-811A

    A. Vladik and Courtesy time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  10. Hive安装&nbsp;&nbsp;&nbsp;&nbsp;…

    Hive安装 mysql使用主机(win7)上的mysql数据库,启动后,要关闭360和win7自带的防火墙,确保在虚拟机里能拼通主机********************************* ...