数据库操作是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 ...
随机推荐
- 洛谷 U6931 灯光
题目背景 明天就是校园活动了,小明作为场地的负责人,将一切都布置好了.但是在活动的前几天,校园里的灯却都坏掉了,无奈之下,只好再去买一批灯.但是很遗憾的是,厂家看马上要过年了,就没有在进货了,现在只剩 ...
- docker安装与操作
准备和安装 1.到这个路径下下载docker engine: https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1 ...
- CentOS下安装配置Samba服务器
0 环境介绍 VMWARE12下安装的CENTOS7虚拟机.宿主机为WIN7. 1 离线安装 费了九牛二虎之力,下载各种依赖,还是有问题,转向在线安装. 2 在线安装 虚拟机采用默认的配置: 其次,网 ...
- Advanced R之编程风格
转载请注明出处,谢谢. 编程风格指导 好的编码风格如同正确使用标点符号一样重要.没有编码规范仍然可以管理代码,但是有代码规范会使代码更易阅读.如同标点样式,编码规范也有不同.下面描述的是我所使用的 ...
- 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 ...
- Oracle的rowid
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...
- win7 x64 eclipse_kepler下编译 hadoop1.1.2-celipse-plugin
1.编译前准备 a) 下载和解压hadoop-1.1.2.tar.gz b) 下载并配置ant 2.配置 a) 进入hadoop-1.1.2\src\contrib ...
- eos管理页面
调用此方法删除需要在po_module_processdef添加数据如下 默认情况下申请页面是有权限的 但是在此表加过之后 管理页面要打开拟稿页面还必须在 系统管理页面(xtgl.jsp ) 分 ...
- 火狐浏览器httprequest插件添加和使用方法(适用于前后台分离,测试后台接口)
第一步:打开火狐浏览器工具栏找到添加组件 1.如图1点击添加组件 第二步:添加组件Httprequest 1.如图2,检索Httprequest 2.如图3,将组件添加到火狐浏览器中 3.如图3.5, ...
- 51nod1127(尺取法)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1127 题意:中文题诶- 思路:尺取法 维护一个队列,若当前队 ...