将一组变量数据转换为json格式保存到数据库中
解决问题:
在上位机开发中,需要每秒将实时数据插入到数据库中,以便于后期查询历史数据。
例如,上位机每秒从PLC中读取100个变量的实时数据,然后再将这100个变量数据保存到数据库中,如何操作?
第一种方法,数据库中的数据表设计为1+100列,第一列为插入时间,后100列为每个变量的数据。
这种方法,数据表不好维护,如果后期添加删除变量,需要对数据表的结构进行修改。
第二种方法,数据表设计为2列,第一列为插入时间,第二列为所有数据的信息。
具体操作方法,将100个数据信息保存成json格式,以字符串的形式保存到数据库中。
实现方法如下:
第一步,设计数据表,将保存json数据列的类型设置为nvarchar(max);
第二步,在NuGet中安装Newtonsoft库;
第三步,使用Newtonsoft将多个数据保存为json字符串;
这一步有两种方法实现,
方法1:建一个ParamValue类,设置100个属性来存放100个变量数据,属性名与变量名相同,如下:
public class ParamValue { public string value1 { get; set; } public string value2 { get; set; } public string value3 { get; set; } public string value4 { get; set; } public string value5 { get; set; } …… public string value100 { get; set; } }
将ParamValue的实例转成json格式,
string json = JsonConvert.SerializeObject(paramValue);
方法2,使用dictionary<string,float>,字典中的key为变量名,value为变量值,将dictionary<string,float>的实例valueDic转成json字符串
string json = JsonConvert.SerializeObject(valueDic);
这两种方法中,推荐使用方法2,
因为第一,ParamValue的属性需要手动输入,太麻烦,使用dictionary可以根据解析的变量信息自动获取;
第二,如果后期增加或删除变量点,需要修改ParamValue中的属性,虽然可以将ParamValue设置为动态类型,但是不能编译时检查,不友好。
第四步,使用sqlsugar将数据插入到数据库中。(参考sqlsugar使用)