C#調取接口更新表格數據

背景

        由于我们系统的数据没有更新,用户要求我们数据要跟另一个系统的作业同步,其实我是觉得那边作业完直接将我们的数据更新会更好,数据更新也会更实时(我们提供接口),奈何别人不愿意,而且别人是处于中央,于是就只能我们来调中间的一个系统提供的接口来更新数据。

        其实我最想说的就是能不能提供批量更新接口,非要我一个一个循环丢。

分析

他们作业的数据是从我们系统下载的,但作业结果是在他们自己的系统里面的,所以我们

  • 需要建立对应的栏位来接受更新的值,以及我们系统更新数据的时间
  • 编写我们调用他接口的逻辑处理接口
    • 查询我们系统需要check的数据(按时间段来,规定一个时间段,因为作业一般不会跨很久)
    • 将需要check的数据丢进接口获取符合更新条件的人
    • 将获取到的数据解析出来
    • 更新数据状态和时间(可以执行多个SQL,开心,最开心就是这里了,终于会用了)
  • 建立排程来定时执行

准备工作

  • VS 2019 .Net Core
    • 涉及到的dll
    • Newtonsoft.Json(12.0.3 序列化用的)
    • Dapper(2.0.35 据说是orm框架,但我还没怎么了解过,也没怎么用过)
    • Oracle.ManagedDataAccess.Core(2.19.100 Oracle连接数据库的,免客户端安装,用连接字符串即可)
  • 别人的接口
  • 自己的数据源

数据难点(核心代码)

  • 把json数组拿出来
  • 序列化数据

获取到的数据格式如下,但红色的部分我不需要,只需要其他部分的

"<?xml version="1.0" encoding="utf-8"?>\r\n<string xmlns="http://tempuri.org/">[{"EMP_NO":"111123","EMP_NAME":"张三","isLeft":"true"}]</string>"

"<?xml version="1.0" encoding="utf-8"?>\r\n<string xmlns="http://tempuri.org/">[{"EMP_NO":"111123","EMP_NAME":"张三","isLeft":"true"}]</string>"

把json数组拿出来

// 调用接口获取数据(自己封装好的方法)
var data = HttpHelper.HttpGet("url");

// 将json数组捞出来
// 以数组的前后端为截取点,把数组截取出来(你也可以把固定的部分固定替换掉,但怕它变,虽然几率比较小)
int istart = data.IndexOf('[');
int iend = data.IndexOf(']');
data = data.Substring(istart, iend - istart + 1); 

序列化数据

// 序列化json数组
var dd = JArray.Parse(data);
var obj = (JObject)dd[0];
string isLeft = obj.GetValue("isLeft").ToString();

 执行多个SQL

        因为在Oracle中in里面最多能放999个值,所以我就切分了一下,这个切分涉及到System.Linq语法

  List<string> emps = new List<string>();
  int i = emps.Count / 999;
  for (int j = 0; j <= i; j++)
  {
      var temEmps = emps.Skip(j).Take(999);                        
      _sqlDapper.QueryMultiple(@"begin 
         UPDATE TABLE1 SET JOBSTATUS ='已',RUNTIME = TO_CHAR(SYSDATE,'yyyy/mm/dd HH:mi:ss') WHERE EMP_NO in :emp;
         UPDATE TABLE2 SET JOBSTATUS ='已',RUNTIME = TO_CHAR(SYSDATE,'yyyy/mm/dd HH:mi:ss') WHERE EMP_NO in :emp;
         UPDATE TABLE3 SET JOBSTATUS ='已',RUNTIME = TO_CHAR(SYSDATE,'yyyy/mm/dd HH:mi:ss') WHERE EMP_NO in :emp;
         end;" , new { emp = temEmps });
  } 

         感谢亲爱的菲菲给我在截取方面的建议、序列化方面提供的支援,我对于数据结构、类型真的是太不敏感了,谢谢菲菲的指导!!!

参考文章

c#中执行多条sql语句【ORA-00911: 无效字符】_weixin_34176694的博客-CSDN博客

(1条消息) ORA-01745: 无效的主机/绑定变量名_梁萌的博客-CSDN博客_ora01745 无效的主机

(1条消息) ORM框架介绍——什么是ORM框架?_Mr.VK的博客-CSDN博客_orm框架

猜你喜欢

转载自blog.csdn.net/qq_41128526/article/details/127449616