当前位置: 首页 > news >正文

.NET 直连SAP HANA数据库

前言

上个项目碰到的需求,IT部门要求直连SAP的HANA数据库,以只读的权限读取SAP部门开发的CDS视图,是个有点复杂的工程,需要从成品一直往前追溯到原材料的产地,和交货单、工单、采购订单有相当程度上的关联
IT部门要求一个物料组一个视图往前追溯,当时一个完整的物料追溯线就要做十多个视图,跟另一位同事熬夜加班加点一个多月到半夜两三点甚至通宵开发了七八十个视图,感觉寿命跟头发都少了不少
之所以我作为ABAPER要直连数据库是因为IT部门说我们的视图有问题,经常出现找不到视图的问题,当时我也不信邪就自己用C#做了这个直连的事儿,后来发现使用AMDP开发的视图如果修改后重新激活有可能会出现下述情况,问了乙方供应商也没得到问题的解决方案,后来同事做了个定时JOB去读取AMDP开发的视图,后面就没这个问题了
在这里插入图片描述

安装和配置ODBC驱动

当时做其他项目的时候给电脑装的ODBC,我这儿也没有具体的安装步骤,可以参考下其他人的博客
安装完之后启动ODBC客户端,转到系统DSN处(用户DSN我试了用这个连不上),点击添加按钮
在这里插入图片描述
选HDBODBC,这个驱动程序我也不知道哪儿来的,好像是安装hana client的时候就装上去了
在这里插入图片描述
数据库类型选择SAP HANA Database(Single-tenant)
数据库服务器地址和端口还有测试连接用的账号都是跟basis要的,basis万岁~
在这里插入图片描述
到这一步如果输入账号密码点击测试连接可以成功基本就没问题了
我的VPN账号到期了连不上了…

.Net代码连接数据库并查询视图

新建项目啥的都没啥讲的也懒得截图,选个C#的命令行项目就行,代码在下面

using System.Data;
using System.Data.Odbc;// DSN: 在ODBC 系统DSN 处配置的连接名
// UID: Basis给的数据库用户名
// PWD: Basis给的数据库密码
// DATABASENAME:Basis给的数据库名称
// 还有个语言的标识,好像是land=zh可以设置连接时语言使用中文,zh必须必须小写,大写会失败
String connStr = "DSN=HANADB;uid=xxxxxxx;pwd=xxxxxxxx;DatabaseName=xxx";
OdbcConnection conn = new OdbcConnection(connStr);conn.Open();TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks); //获取当前时间的刻度数// 查询时必须是SAPHANADB.XXX,很奇怪,一定要加上SAPHANADB.才能访问到表或者视图
OdbcCommand selectCmd = new OdbcCommand(" SELECT * FROM SAPHANADB.ZPPV001 where mandt = 300 ", conn);
//OdbcCommand selectCmd = new OdbcCommand(" SELECT * FROM SAPHANADB.ydemo WHERE mandt = 300  ", conn);
var adapter = new OdbcDataAdapter(selectCmd);DataTable dt = new DataTable();
// 这行语句就是在执行查询了,结果集会存到DataTable类型的变量dt中
adapter.Fill(dt);TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
TimeSpan ts = ts2.Subtract(ts1).Duration(); //时间差的绝对值
string spanTotalSeconds = ts.TotalSeconds.ToString(); //执行时间的总秒数
string spanTime = ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒" + ts.Milliseconds.ToString() + "毫秒" + ts.Microseconds.ToString() + "微秒"; //以X小时X分X秒的格式现实执行时间
Console.WriteLine(spanTotalSeconds);
Console.WriteLine(spanTime);conn.Close();if (dt != null) Console.Write("查询成功");

到这就差不多结束了,做的那七八十个视图不知道咋样了,听说其中有一个我做的视图崩了…可能数据量太大或者查询语句太复杂了吧,珍爱生命,远离溯源qaq

http://www.lryc.cn/news/357362.html

相关文章:

  • HTML <from>表单
  • Wpf 使用 Prism 实战开发Day28
  • 如何让一个普通用户可以读写某个目录
  • 知识笔记——jieba分词初探
  • GPT-4o:人工智能新纪元的开端
  • 探索AI去衣技术中的反射应用
  • 一款高级管理控制面板主题!【送源码】
  • ​用 ONLYOFFICE 宏帮你自动执行任务:介绍与教程
  • C++ vector类
  • QMetaObject::invokeMethod 简介
  • 2024-05-29 精神分析-孤独感-分析
  • 开源与闭源AI模型的对决:数据隐私、商业应用与社区参与
  • [C语言]自定义类型详解:结构体、联合体、枚举
  • Vue3使用Composition API实现响应式
  • 使用moquette mqtt发布wss服务
  • 【笔记】软件架构师要点记录(2)
  • 56.野指针和悬空指针
  • echarts-dataset,graphic,dataZoom, toolbox
  • AI界的“拼夕夕”登场,为上万张GPU寻找新使命
  • STM32-13-MPU
  • (超详细)字符函数和字符串函数【上】
  • AUS GLOBAL 荣获 Brokersview 颁奖盛典多项殊荣
  • Spring Aop 实现对mapper层入参进行重新赋值
  • 朗读亭主要作用有哪些?
  • 力扣:226. 翻转二叉树
  • 深入解析 JSONPath:从入门到精通
  • Python算法设计与分析期末
  • pg_lakehouse 与 datafusion
  • 基于51单片机的酒精浓度检测仪的设计
  • 重生之 SpringBoot3 入门保姆级学习(02、打包部署)