数据库操作是sql的操作1
项目过来以后,
查
先肯定是做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的更多相关文章
- sql server操作2:查询数据库语句大全【转】
注:以下操作均建立在上篇文章sql Server操作1的数据基础之上 一.实验目的 熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询 二.实验内容和要求 使用SQL查询分析器查询数据,练 ...
- 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷
原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...
- mysql导入导出sql文件(包括数据库和数据表的操作)
废话不多说直接开始. 在windows命令行下登录mysql,创建一个test_01数据库,创建一个user表,并插入一条数据,如下 一.导出数据库test_01 1.退出数据库,在命令行中输入 my ...
- 关闭数据库下的所有连接操作 sql存储过程
use master go )) as begin ),) declare @spid int set @sql='declare getspid cursor for select spid fro ...
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作
在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5 , mysq驱动jar包为mysql-connector ...
- 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】
问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- Electron中使用sql.js操作SQLite数据库
推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...
随机推荐
- bootstrap框架日期时间 开始日期和结束日期选择
页面表单查询时,常要求要查询一个日期时间段内的数据,若采用bootstrap框架的datetimepicker插件来控制,需要了解怎么个用法:
- 「HNOI2008」「LuoguP3197」越狱(数论
题目描述 原题来自:HNOI 2008 监狱有连续编号为 111 到 nnn 的 nnn 个房间,每个房间关押一个犯人.有 mmm 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人信仰的宗教相同, ...
- 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd
题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...
- ACM学习历程——NOJ1113 Game I(贪心 || 线段树)
Description 尼克发明了这样一个游戏:在一个坐标轴上,有一些圆,这些圆的圆心都在x轴上,现在给定一个x轴上的点,保证该点没有在这些圆内(以及圆上),尼克可以以这个点为圆心做任意大小的圆,他想 ...
- 【Lintcode】103.Linked List Cycle II
题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...
- django 自定义日志配置
如果不想使用 python 的 dictConfig 格式来配置 logger,可以制定自己的配置架构. LOGGING_CONFIG 配置定义了用来配置 django logger 的可调用函数,默 ...
- TFS 备注
1,更改任何文件, 先checkout, 再继续更改. 2. 更新sln时, 一定要更新include文件 3. 每次提交代码放到shelf上, 自己本地建立2个workspace, 来进行coder ...
- Selenium Webdriver元素定位
http://www.cnblogs.com/qingchunjun/p/4208159.html
- 搭建Android 开发环境(精华)
http://www.cnblogs.com/xdp-gacl/p/4322165.html 孤傲苍狼 只为成功找方法,不为失败找借口! Android开发学习总结(一)——搭建最新版本的Androi ...
- 35.Docker安装Mysql挂载Host Volume
连个文件系统有块区域Area,我们要做的是把两个Area做文件映射 jesse腾讯云上有个linux的环境,版本比较老了 简书的地址: https://www.jianshu.com/p/b3bf64 ...