下面是我学习WinForm,窗体应用时的记录:
1. 使用封装的方法进行查询Sqlite数据库
public static class SqliteHelper
{
//从配置文件中读取连接字符串
private static string connStr = ConfigurationManager.ConnectionStrings["itcastCater"].ConnectionString;
//执行命令的方法,insert、update、delete
public static int ExecuteNonQuery(string sql, params SQLiteParameter[] ps)
{
//创建连接对象
using(SQLiteConnection conn = new SQLiteConnection(connStr))
{
//创建命令对象
SQLiteCommand comd = new SQLiteCommand(sql, conn);
//添加参数
comd.Parameters.AddRange(ps);
//打开连接
conn.Open();
//执行命令,并返回受影响的行数
return comd.ExecuteNonQuery();
}
}
//获取首行首列的方法
public static object ExecuteScalar(string sql, params SQLiteParameter[] ps)
{
//创建连接对象
using (SQLiteConnection conn = new SQLiteConnection(connStr))
{
//创建命令对象
SQLiteCommand comd = new SQLiteCommand(sql, conn);
//添加参数
comd.Parameters.AddRange(ps);
//打开连接
conn.Open();
//执行命令,获取查询结果中的首行首列的值
return comd.ExecuteScalar();
}
}
//获取结果集
public static DataTable GetDataTable(string sql, params SQLiteParameter[] ps)
{
using(SQLiteConnection conn = new SQLiteConnection(connStr))
{
//构造适配器对象
SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
//构造数据表,用于接收查询结果
DataTable dt = new DataTable();
//添加参数
adapter.SelectCommand.Parameters.AddRange(ps);
//执行结果
adapter.Fill(dt);
//返回结果集
return dt;
}
}
}
2.操作数据库的类,手动写查询代码
#region 操作数据库的类,手动写查询代码
/*
* 操作数据库的类
* 连接:Connection -> SqliteConnection
* 命令:Command
* 适配器:DataAdapter、DataReader、DataSet、DataTable
*/
// 构造接受数据的集合
List<ManagerInfo> list = new List<ManagerInfo>();
//从数据库表ManagerInfo中查询数据
//1.获取连接字符串,数据库存放的路径
string connStr = @"data source=E:\Sqlite3File\ItcastCater.db;version=3;";
//2.创建连接对象
using (SQLiteConnection conn = new SQLiteConnection(connStr))
{
//3.创建Command对象
SQLiteCommand comd = new SQLiteCommand("select * from ManagerInfo", conn);
//4.打开连接
conn.Open();
//5.执行命令
SQLiteDataReader reader = comd.ExecuteReader();
//6.读取
if (reader.HasRows)//判断是否存在数据行
{
while (reader.Read())
{
// 将一行数据构造成对象加入集合
list.Add(new ManagerInfo()
{
Mid = Convert.ToInt32(reader["mid"]),
Mname = reader["mname"].ToString(),
Mpwd = reader["mpwd"].ToString(),
Mtype = Convert.ToInt32(reader["mtype"])
});
}
}
reader.Close();
//7.将ManagerInfo查询的数据显示到DataGridView上
dgvList.DataSource = list;
}
#endregion
3.Sqlite的增删改查
public partial class ManagerInfoDal
{
/// <summary>
/// select 查询 获取结果集
/// </summary>
/// <returns></returns>
public List<ManagerInfo> GetList()
{
//构造要查询的sql语句
string sql = "select * from ManagerInfo";
//使用helper进行查询,得到结果
DataTable dt = SqliteHelper.GetDataTable(sql);
//将dt中的数据转存到list中
List<ManagerInfo> list = new List<ManagerInfo>();
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;
}
/// <summary>
/// 插入数据
/// </summary>
/// <param name="mi">ManagerInfo类型对象</param>
/// <returns></returns>
public int Insert(ManagerInfo mi)
{
//构造insert语句
string sql = "insert into ManagerInfo(mname, mpwd,mtype) values(@name, @pwd, @type)";
//构造sql语句参数
SQLiteParameter[] ps = { //使用数组初始化器
new SQLiteParameter("@name", mi.MName),
//将密码进行md5加密
new SQLiteParameter("@pwd", Md5Helper.EncryptString(mi.MPwd)),
new SQLiteParameter("@type", mi.MType)
};
//执行插入操作
return SqliteHelper.ExecuteNonQuery(sql, ps);
}
/// <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());
}
/// <summary>
/// 根据编号删除管理员
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int Delete(int id)
{
//构造删除的sql语句
string sql = "delete from ManagerInfo where mid=@id";
//根据语句构造参数
SQLiteParameter p = new SQLiteParameter("@id", id);
//执行操作
return SqliteHelper.ExecuteNonQuery(sql, p);
}
}