(二十八)数据库开发
1. 创建一个数据库

2. 创建数据库模块
都是类库
2.1 抽象基类模块
- 所有表的实体抽象基类
- CRUD的接口
![image]()
2.2 SQLServer数据库模块
- nuggets包安装
- 添加引用
- 添加生成事件
- 添加模块配置类
![image]()
3.EF框架生成数据库映射实体
-
添加实体数据模型
![image]()
![image]()
-
一般服务器名如果是本机就是“.”
![image]()
![image]()
![image]()
-
自动生成的类对应数据库的表
![image]()
-
数据库连接字符串
![image]()
-
EF通过连接字符串找到配置信息,包括用户名密码数据库名等,与数据库进行连接
![image]()
4.用户表CRUD业务
member需要继承基类,但是EF生成的没有继承,所有可以创建一个部分类来继承,但是注意命名空间需要一致

用户仓库接口

实现类:
要创建仓储上下文
UpperDBEntities db = new UpperDBEntities();

shell需要添加EF框架,并且引用抽象数据库模块
5.用户登录
注册到IOC中方便其他模块调用

shell安装ef

验证方式改为数据库验证

报错解决:

把数据库层app.config的这一段配置复制到shell的app.config中

C#常用加密解密方法(MD5加密解密)
6.用户登录的Session保存和显示
6.1 md5加密
/// <summary>
/// 获得32位的MD5加密
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string GetMD5_32(string input)
{
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sb.Append(data[i].ToString("x2"));
}
return sb.ToString();
}
数据库保存的是加密后的密码

6.2 Session
在share做个接口

在login的model中实现

session在vm的构造函数引入
使用:

7. 创建温度数据表并重新映射实体类
创建数据表

在程序中更新模型

选中表

创建接口

并创建温度的部分类继承基类

然后实现温度接口,和用户表一样,仓储的实例化可以提取到抽象基类中做。


8. 采集温度数据写入数据库
创建虚拟数据

在main模块的vm保存数据

9.切换温度历史数据界面
图标绑定命令

直接导航

切换到温度界面还可以用事件聚合器做,如果把按钮做在别的模块时。
10. 查询数据库记录并绑定到DataGrid
做一个筛选栏

表格的设置和绑定

然后做查询

11.数据导出到本地csv文件
导出方法:

/// <summary>
/// 导出CSV助手
/// </summary>
public class ExportHelper
{
public static void Export<T>(ObservableCollection<T> array,string filename=null)
{
var t=typeof(T);
var properties=t.GetProperties(System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.Public );
var stringBuilder=new StringBuilder();
//标题
foreach( var item in properties )
{
stringBuilder.Append(item.Name);
stringBuilder.Append(",");
}
stringBuilder.Append("\r\n");//回车
//内容
foreach( var model in array)
{
var row=new StringBuilder();
foreach(var property in properties )
{
var val=property.GetValue(model);//返回当前属性的值
row.Append(val.ToString());
row.Append(",");
}
stringBuilder.Append(row.ToString());
stringBuilder.Append("\r\n");//回车
}
if (string.IsNullOrEmpty(filename))
{
var date = $"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}";
filename = $"{date}.csv";
}
else
{
filename = $"{filename}";
}
//写入文件
File.WriteAllText(filename, stringBuilder.ToString());
}
}












浙公网安备 33010602011771号