版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ot512csdn/article/details/90751158
SAP PO中间件系统,使用的SAP HANA数据库,平台上数据交换日志都写到BC_MSG_LOG这张表里,
但PO的管理界面提供的功能很弱,无法基于这张表的数据做多维度的统计和展示。
如果我们想做一些指标的展示,例如下面,我们需要在HANA数据库中自己读出这张表的数据。

C#对数据库的操作当然应该是用微软的EF框架,效率超高。
可惜HANA才推出不久,配套的微软EF框架还没出来。
那就先用ODBC试试:
一、在SAP官网下载HANA的client安装包(其中包含C#开发类库)
HDB_CLIENT_WINDOWS_X86_64_20190112.zip
安装完成后要重启动WIN10系统,然后ODBC里面才能看到HANA的驱动。
二、在系统ODBC里面,配一个连接出来。

三、打开VS2017,建一个WINFORM桌面程序,全部代码如下:
(注意项目用64位程序编译才能通过)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Odbc; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace forHana { public partial class Form1 : Form { public Form1() { InitializeComponent(); try { //注意项目用64位编译 OdbcConnection conn = new OdbcConnection("DSN=POD;UID=;PWD=;DatabaseName=POD"); conn.Open(); listBox1.Items.Add($"当前HANA数据库状态{conn.State}"); listBox1.Items.Add($"当前连接的HANA数据库服务器的版本{conn.ServerVersion}"); OdbcCommand selectCmd = new OdbcCommand("SELECT * FROM BC_MSG_LOG", conn); var adapter = new OdbcDataAdapter(selectCmd); DataTable dt = new DataTable(); adapter.Fill(dt); listBox1.Items.Add("表行数:"+dt.Rows.Count.ToString()); conn.Close(); dataGridView1.Columns.Add("RowState", "rowstate");//添加新列 foreach (DataColumn col in dt.Columns) { dataGridView1.Columns.Add(col.ColumnName, col.ColumnName); } dataGridView1.Rows.Clear(); dataGridView1.Rows.Add(dt.Rows.Count);//增加同等数量的行数 int i = 0; foreach (DataRow row in dt.Rows)//逐个读取单元格的内容; { DataGridViewRow r1 = dataGridView1.Rows[i]; r1.Cells[0].Value = row.RowState.ToString(); for (int j = 0; j < dt.Columns.Count; j++) { r1.Cells[j + 1].Value = row[j].ToString(); } i++; } } catch (Exception e) { listBox1.Items.Add(e.Message); } } } }
我们到HANA数据库里读取BC_MSG_LOG表的数据,并显示出来:

这张表和C#环境连接上了,我们可以对这张表出各种维度的指标统计,包括识别错误消息后的告警。
文章来源: https://blog.csdn.net/ot512csdn/article/details/90751158