.NET 直连SAP HANA数据库

news2024/11/15 18:51:28

前言

上个项目碰到的需求,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.coloradmin.cn/o/1714895.html

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

相关文章

MySQL的安全性

给root用户设置密码 点击用户--下面三个账号双击--进行编辑 修改密码--修改完进行保存 关闭数据库后连接不上 重新编辑,设置密码 新建账号 填入信息--保存(主机哪里要选择%) 连接这个新的账号 点击连接--填写连接的名称,地址&…

使用moquette mqtt发布wss服务

文章目录 概要一、制作的ssl证书二、配置wss小结 概要 moquette是一款不错的开源mqtt中间件,github地址:https://github.com/moquette-io/moquette。我们在发布mqtt服务的同时,是可以提供websocket服务器的,有些场景下需要用到&a…

多激光雷达ip与端口配置

首先是雷达的ip 我们连上雷达,想要进入雷达的上位机的时候,需要对本机ip进行一些配置: 第一个是ip,第二个是掩码,第三个是网关。 其中ip可以通过wireshark来进行读取,一般就是192.168.102(雷达默认) 然后掩…

一种基于高德Web API实现沿路画面的实现

概述 本文在mapboxGL框架下,分享一种基于高德Web API实现沿路画面的实现。 实现效果 实现 1. 实现思路 通过点击获取路径的起点和终点;将多次规划路径的结果连成一条线;当鼠标点击回到第一个点的时候结束绘制;绘制结束后将路径…

Linux: network: tcp spurious retrans 的一个原因

最近分析问题的时候,从wireshark里看有:tcp spurious retrans 的包,309这个是307 的retransmission,而且在308 回复了ACK。那为什么会重传? 从网上找了一些,比如 https://www.packetsafari.com/blog/2021…

# 解决 win11 连接共享打印机,报错 0x00000709 问题

解决 win11 连接共享打印机,报错 0x00000709 问题 一、问题描述: 当我们连接一台共享打印机,出现报错 0x00000709 时,这是由于本机注册表本配置 RPC 远程调用,我们需要对自己的电脑进行修改,而不是主机&a…

3DEXPERIENCE DELMIA Role: RVN - Robotics Virtual Commissioning Analyst

Discipline: Robotics Role: RVN - Robotics Virtual Commissioning Analyst 通过准确地模拟连接到PLC程序的机器人、设备和传感器,在制造虚拟孪生上执行虚拟调试情景 为任何机器人角色的多周期情景创建传感器,生成和变换零件启用 PLC 程序的虚拟验证和…

【C语言习题】25.求两个数二进制中不同位的个数

文章目录 作业标题作业内容2.解题思路3.具体代码4.代码讲解 作业标题 求两个数二进制中不同位的个数 作业内容 编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例…

算法——链表

一、重新排队——蓝桥杯3255 1.2题解 思路 对1-n的数字进行m次操作得到的结果&#xff08;每次移动的是x&#xff09; 代码 #include <iostream> using namespace std; int main() {// 请在此输入您的代码int n,m;cin>>n>>m;int i1;int a[m][3];for(i;i…

数据结构(八)二叉树、哈希查找

文章目录 一、树&#xff08;一&#xff09;概念1. 前序遍历&#xff1a;根左右2. 中序遍历&#xff1a;左根右3. 后序遍历&#xff1a;左右根4. 层序遍历&#xff1a;需要借助队列实现 &#xff08;二&#xff09;代码实现&#xff1a;二叉树1. 结构体定义2. 创建二叉树1. 注意…

探析GPT-4o:技术之巅的跃进

如何评价GPT-4o? 简介&#xff1a;最近&#xff0c;GPT-4o横空出世。对GPT-4o这一人工智能技术进行评价&#xff0c;包括版本间的对比分析、GPT-4o的技术能力以及个人感受等。 随着人工智能领域的不断发展&#xff0c;GPT系列模型一直处于行业的前沿。最近&#xff0c;GPT-4…

基于51单片机的温度+烟雾报警系统设计

一.硬件方案 本设计采用51单片机为核心控制器&#xff0c;利用气体传感器MQ-2、ADC0832模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片&#xff0c;当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号&#xff0c;以此来…

2018 年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书

2018年山东省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 赛项时间 8:30-13:00&#xff0c;共计4小时30分钟&#xff0c;含赛题发放、收卷时间。 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 …

【MATLAB源码-第217期】基于matlab的16QAM系统相位偏移估计HOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 高阶统计量&#xff08;HOS&#xff09;频偏估计算法 高阶统计量&#xff08;Higher Order Statistics, HOS&#xff09;频偏估计算法是一种先进的信号处理技术&#xff0c;广泛应用于现代数字通信系统中&#xff0c;以应对…

0基础认识C语言(理论+实操 2)

小伙伴们大家好&#xff0c;今天也要撸起袖子加油干&#xff01;万事开头难&#xff0c;越学到后面越轻松~ 话不多说&#xff0c;开始正题~ 前提回顾&#xff1a; 接上次博客&#xff0c;我们学到了转义字符&#xff0c;最后留下两个转义字符不知道大家有没有动手尝试了一遍&a…

数据库设计实例---学习数据库最重要的应用之一

一、引言【可忽略】 在学习“数据库系统概述”这门课程时&#xff0c;我一直很好奇&#xff0c;这样一门必修课&#xff0c;究竟教会了我什么呢&#xff1f; 由于下课后&#xff0c;&#xff0c;没有拓展自己的眼界&#xff0c;上课时又局限于课堂上老师的讲课水平&#xff0c;…

(超详细)字符函数和字符串函数【上】

前言 C 语言中对字符和字符串的处理很是频繁&#xff0c;但是 C 语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数 . 1.求字符串长度函数 strlen函数 我们要求一个字符串函数的长度…

数学建模--LaTex插入表格详细介绍

目录 1.插入普通的边线表格 3.三线表的插入和空格说明 3.基于复杂情况下表格的插入 1.插入普通的边线表格 &#xff08;1&#xff09;像这个右边的生成的这个比较普通的表格&#xff0c;我们是使用下面的代码实现的&#xff1a; &#xff08;2&#xff09;和插入一个一个图片…

子集和问题(回溯法)

目录 ​​​​ 前言 一、算法思路 二、分析过程 三、代码实现 伪代码&#xff1a; C&#xff1a; 总结 前言 【问题描述】考虑定义如下的PARTITION问题中的一个变型。给定一个n个整数的集合X{x1,x2,…,xn}和整数y&#xff0c;找出和等于y的X的子集Y。 一、算法思路 基本思想&am…

字母的大小写转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了lower()方法和upper()方法进行字母的大小写转换&#xff0c;即可用于将大写字母转换为小写字母或者将小写字…