目录
定义一些静态变量
// 在这里都定义成全局的 一般都定义成静态的 private static MqttClient mqttClient; // mqtt客户端 private static string mqttServer = "121.37.84.114"; // mqtt服务器地址 private static string mqttClientId = "frank_writer"; // 客户端id 随便写 private static string SubscribedTopic = "fb5756"; // 订阅主题 //连接数据库字符串 private static string connectionString = "Data Source=MOGFPLQEEJOTGON\\SQLEXPRESS;Initial Catalog=frank;User ID=frank;Password=root123"; // JObject用来生成一个JSON对象,简单来说就是生成”{}”, // JArray用来生成一个JSON数组,也就是”[]”, // JProperty用来生成一个JSON数据,格式为key/value的值, // 而JValue则直接生成一个JSON值 private static JObject jsonObject; // private Timer timer;// 添加一个定时器
定时器事件的处理器
private void File_access_date(object sender, EventArgs e) { //public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert); // 四个参数 服务器ip 端口号 不需要 网络传输证书 mqttClient = new MqttClient(mqttServer, 1883, false, null); // 连接服务器 // 给客户端订阅数据 添加事件执行器 mqttClient.MqttMsgPublishReceived += MqttClient_MqttMsgPublishReceived;// 给mqtt添加事件执行器 mqttClient.Connect(mqttClientId); // 添加连接服务的id // 订阅主题,连接质量为2 ,这个两个数组目前就两个参数 mqttClient.Subscribe(new string[] { SubscribedTopic }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); }
订阅数据的执行器
// 事件具体处理器,处理具体读取的数据 private static void MqttClient_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { // Handle the message, e.g., write to SQL 获取json格式的数据 string message = System.Text.Encoding.UTF8.GetString(e.Message); //MessageBox.Show("Subscribed to " + e.Message); 查看内容 WriteToDatabase(message);// 写到数据库里面 }
处理json格式数据和将处理好的数据添加到数据库中
private static void WriteToDatabase(string data) { // sql语句 string sql = "INSERT INTO FLF800(REG001,REG002,REG003,REG004,REG005,REG006,REG007) VALUES (@REG001,@REG002,@REG003,@REG004,@REG005,@REG006,@REG007) "; string newDate = data.Replace("08", ""); //去掉多余的字符 string endDate = newDate.Replace("-","");//去掉'-'字符 JObject jsonObject = JObject.Parse(endDate);// 将字符串重新转为JSON格式的数据 string senserDatas = jsonObject["sensorDatas"].ToString();//获取json数据的第一个元素 // 转为json数据,转之前数据格式必须是一样的不可以又多余的格式,不然就会报错 JArray jsonArray = JArray.Parse(senserDatas); // 将json其转化为数据 int sum = jsonArray.Count; // 获取数据的大小 Dictionary<string, string> dictionary = new Dictionary<string, string>();// 字典来存储数据 // for (int i = 0; sum > 0;i++) { jsonObject = jsonArray[i] as JObject;// 将每一个json元素重新转为json对象 dictionary.Add(jsonObject["flag"].ToString(), jsonObject["value"].ToString()); sum--; } //power = JsonConvert.DeserializeObject<PowerData>(endDate); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@REG001", dictionary["REG001"]); cmd.Parameters.AddWithValue("@REG002", dictionary["REG002"]); cmd.Parameters.AddWithValue("@REG003", dictionary["REG003"]); cmd.Parameters.AddWithValue("@REG004", dictionary["REG004"]); cmd.Parameters.AddWithValue("@REG005", dictionary["REG005"]); cmd.Parameters.AddWithValue("@REG006", dictionary["REG0061"]); cmd.Parameters.AddWithValue("@REG007", dictionary["REG0062"]); cmd.ExecuteNonQuery(); } } //MessageBox.Show("数据添加成功"); }
要求和最终效果
总结一下
// JObject用来生成一个JSON对象,简单来说就是生成”{}”, 调用静态方法,重新变成json对象 JObject jsonObject = JObject.Parse(endDate);// 将字符串重新转为JSON格式的数据 string senserDatas = jsonObject["sensorDatas"].ToString();//获取json数据的第一个元素 // JArray用来生成一个JSON数组,也就是”[]”, // 转为json数据,转之前数据格式必须是一样的不可以又多余的格式,不然就会报错 JArray jsonArray = JArray.Parse(senserDatas); // 将json其转化为数据 int sum = jsonArray.Count; // 获取数据的大小 // 这两个没有用到,但在百度上查到了,在这里也提一下 // JProperty用来生成一个JSON数据,格式为key/value的值, // 而JValue则直接生成一个JSON值标签:读取数据,dictionary,数据库,cmd,JSON,private,json,eqmx,string From: https://blog.csdn.net/weixin_42376775/article/details/140681730