【无标题】c# WEBAPI 读写表到Redis

//c# WEBAPI  读写表到Redis
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using StackExchange.Redis;
using System.Data;
using System.Web;

namespace Manage002.web.Controllers
{
    [RoutePrefix("api/Manage002ReportRedis")]
    public class Manage002ReportRedisController : ApiController
    {

        //ConnectionMultiplexer _conn = RedisConnectionHelp.Instance;//初始化   
        public_org_rpt por = new public_org_rpt();
        public_top_rpt ptr = new public_top_rpt();

        [HttpGet]
        [Route("getGoodtag")]
        /// <summary>
        /// 从缓存中读取erp_goodtag表
        /// </summary>
        /// <param name="orgid">机构ID</param>
        /// <returns></returns>
        public DataSet getGoodtag(string orgid)
        {
            ConnectionMultiplexer _conn = ConnectionMultiplexer.Connect("localhost");
            DataSet dsGoodtag = new DataSet();
            string sqlGoodtag = @"select id,tagType,tagName,taglevel,parentid,parentlist FROM erp_goodtag ";// where orgid=" + orgid;
            if (_conn != null)//开了redis
            {
                //根据传入的orgid读取Redis中的值
                var database = _conn.GetDatabase(0);
                string res = database.StringGet(orgid + "_dsGoodtag");
                //判断Redis中有没有对应的值
                if (string.IsNullOrEmpty(res))
                {
                    //读取数据库
                    dsGoodtag = ptr.GetList(sqlGoodtag);
                    DataRow[] drow = null;
                    //根据传入的ID筛选
                    if (string.IsNullOrEmpty(orgid))
                    {
                        drow = dsGoodtag.Tables[0].Select();
                    }
                    else
                    {
                        drow = dsGoodtag.Tables[0].Select(" id='" + orgid + "' ");
                    }
                    //将筛选出来的记录用表结构保存,方便进行后面的序列化和反序列化
                    foreach (DataRow row in drow)
                    {
                        DataTable dt_sel = dsGoodtag.Tables[0].Clone();
                        DataRow newRow = dt_sel.NewRow();
                        newRow.ItemArray = row.ItemArray; 
                        dt_sel.Rows.Add(newRow);
                        //对结果表进行序列化
                        string jsonString = JsonConvert.SerializeObject(dt_sel, Formatting.None);
                        //将序列化的数据保存到Redis
                        database.StringSet(row["id"].ToString() + "_dsGoodtag", jsonString);
                    }
                }
                else
                {
                    //Redis中有数据时直接对数据进行反序列化
                    DataTable dtGoodtag = JsonConvert.DeserializeObject<DataTable>(res);
                    dsGoodtag.Tables.Add(dtGoodtag);
                }
            }
            else//直接从数据库里取
            {
                dsGoodtag = ptr.GetList(sqlGoodtag);
            }
            return dsGoodtag;
        }


    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring动态代理详解

一&#xff0c;动态代理 我发现Spring框架中的动态代理是一种非常强大的机制&#xff0c;它可以在运行时为接口或类创建动态代理&#xff0c;然后通过这些代理在方法调用前后添加额外的行为。在后续Spring的AOP&#xff08;面向切面编程&#xff09;支持中扮演了关键角色。 二…

农林企业资质提升策略:聚焦农业综合生态乙级认证

1. 深入了解资质要求 首要任务是全面细致地研究乙级资质的最新标准和要求&#xff0c;包括企业规模、技术人员配置、过往项目经验、财务状况、管理体系等具体指标。 2. 专业团队构建 强化技术团队&#xff0c;确保拥有一支包含注册农业工程师、生态学专家、环境工程师、农业…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

每日算法-插值查找

1.概念 插值查找是一种改良版的二分查找,其优势在于,对于较为均匀分布的有序数列,能够更快地使得mid中间游标快速接近目标值. 2.计算公式 中间游标计算公式. 公式说明: 公式的主要思路是,以第一次定位mid中间游标为例, 在接近平均分配的情况下,左右游标之间的差值表示总计供…

Animate软件基础:从单个图层复制帧

在使用Animate软件制作内容时&#xff0c;有时会需要复制制作好的部分动画&#xff0c;到新的场景中&#xff0c;或者从一个制作文件中复制内容到另一个制作文件&#xff0c;这就需要复制帧的操作&#xff0c;这里讲一下从单个图层复制帧的方法。 在图层中选择一组帧。要选择整…

React@16.x(44)路由v5.x(9)源码(1)- path-to-regexp

目录 1&#xff0c;作用2&#xff0c;实现获取 match 对象2.1&#xff0c;match 对象的内容2.2&#xff0c;注意点2.3&#xff0c;实现 1&#xff0c;作用 之前在介绍 2.3 match 对象 时&#xff0c;提到了 react-router 使用第3方库 path-to-regexp 来匹配路径正则。 我们也…

新能源汽车 LabCar 测试系统方案(二)

什么是LabCar测试 LabCar测试目标是进行整车黄板台架功能测试&#xff0c;用于整车开发和测试阶段&#xff0c;满足设计人员和测试人员的试验需求&#xff0c;以验证整车性能&#xff0c;减少开发工作量。系统主要用于测试静态及动态工况下的纯电动汽车的各项功能实现情况。 …

git 用户名密码Clone代码

#密码中包含&#xff0c;则使用%40代表 cd /disk03/wwwroot/GitDemo/BuildTemp && git clone -b dev --single-branch http://root:test%40123192.168.31.104/root/SaaS.Auto.Api.git git pull origin dev 今天使用LibGit2Sharp在Linux上Clone代码时报错&#xff0c;因…

【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)

学习日期&#xff1a;2024.6.29 内容摘要&#xff1a;基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台&#xff0c;每分每秒都会有人更新内容&#xff0c;我们作为用户当然希望时刻都能收到最新的消息&#xff0c;为…

laravel Dcat Admin 入门应用(三)Grid 之 Column

Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具&#xff0c;只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码&#xff0c;内置丰富的后台常用组件&#xff0c;开箱即用&#xff0c;让开发者告别冗杂的 HTML 代码。 larav…

如何在Vue3项目中引入TypeScript

在这篇文章中&#xff0c;我们将一步步指导你如何在Vue3项目中引入TypeScript。TypeScript是一种强类型的JavaScript超集&#xff0c;可以帮助我们在编写代码时避免许多错误&#xff0c;提高代码的可维护性。下面是具体的实现过程&#xff1a; 第一步&#xff1a;初始化Vue3项目…

Python | Leetcode Python题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:if not prices:return 0n len(prices)k min(k, n // 2)buy [0] * (k 1)sell [0] * (k 1)buy[0], sell[0] -prices[0], 0for i in range(1, k 1):buy[i] …

尚硅谷vue2的todolist案例解析,基本概括了vue2所有知识点,结尾有具体代码,复制粘贴学习即可

脚手架搭建 1-初始化脚手架&#xff08;全局安装&#xff09; npm install -g vue/cli2-切换到创建项目的空目录下 vue create xxxx整体结构 整体思路 App定义所有回调方法 增删改查 还有统一存放最终数据&#xff0c;所有子组件不拿数据&#xff0c;由App下发数据&#xf…

App托管服务分发平台 index-uplog.php 文件上传致RCE漏洞复现

0x01 产品简介 App托管服务分发平台是一个为开发者提供全面、高效、安全的应用程序托管、分发和推广服务的平台。开发者可以将自己开发的应用程序上传到平台上,平台会对上传的应用程序进行审核,确保应用的质量和安全性。平台会根据开发者的要求,将应用分发到不同的应用市场…

5G RAN

两个entity&#xff1a;NodeB、UE entity之间传输数据的东东 entity内部的流水线岗位&#xff1a;L3/L2/L1 岗位之间是消息交互/信令交互

利用labelme制作自己的coco数据集(labelme转coco数据集)

最近刚接触学习mmdetection&#xff0c;需要用到coco格式的数据集。 1.安装labelme 建议在conda(base)环境下安装&#xff08;前提是需要下载anaconda&#xff09;,下面是我已经装过的情况。 2.进入labelme环境下 中间可能会提示安装其它库&#xff0c;自行装上就行。 这里的…

Rtt与linux线程关键函数差异问题

rt_thread_startup和pthread_join()是两个用于处理线程的函数&#xff0c;但它们属于不同的线程库和操作系统环境&#xff0c;具有显著的功能差异。以下是它们的功能对比和差异说明&#xff1a; rt_thread_startup 功能&#xff1a; rt_thread_startup函数用于使初始化状态的…

Codeforces 220B

传送门 题目大意 给出一个长度为 n n n的序列&#xff0c;进行 m m m次询问。 每次询问区间 [ l , r ] [l,r] [l,r]内&#xff0c;有多少个数字 x x x刚好出现了 x x x次。 思路 枚举右端点 r r r&#xff0c;维护左端点 l l l&#xff0c;设法将 s u m ( l , r ) s u m (…

智能社区服务小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;房屋信息管理&#xff0c;住户信息管理&#xff0c;家政服务管理&#xff0c;家政预约管理&#xff0c;报修信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;房屋信…

Flood Fill——AcWing 1097. 池塘计数

Flood Fill 定义 Flood Fill算法&#xff0c;又称为洪水填充或种子填充算法&#xff0c;是一种在图或网格数据结构中探索连通区域的搜索算法。它从一个初始节点&#xff08;种子点&#xff09;开始&#xff0c;将具有相同属性&#xff08;如颜色、值等&#xff09;的相邻节点…