对于 Windows 平台,SAP 提供了三种编程接口:ODBC, MDX (用于 Excel) 和 ADO.NET Provider。但在我的 Windows 系统上测试,ADO.NET Provider 连接 Hana DB 出错,估计是版本问题,只好放弃。ODBC 连接方式使用 C# 和 VBA 测试都能成功 CRUD。以下介绍 ODBC。

ODBC 驱动

安装 SAP Client 就会自动安装 ODBC 驱动。使用 odbcad32.exe 可以查看数据库驱动:

image.png

ODBC 驱动分为 64 位和 32 位。如果 32 位,驱动名称为 HDBODBC32。注意 Windows 有两个 odbcad32.exe 程序 (32 位 和 64 位)。在 Windows 10 下,Windows\system32 文件夹下是 64 位设置程序,Windows\SysWOW64 文件夹下是 32 位设置程序。

还是用前面介绍的 emp_master 表测试 CRUD。测试环境:Visual Stuido 2015。

实体类

实体类在文件 EmpMasterEntity.cs 中。

namespace HanaTest

{

public class EmpMasterEntity

{

public String EmpID { get; set; }

public String Gender { get; set; }

public int Age { get; set; }

public String EMail { get; set; }

public String PhoneNr { get; set; }

public String Education { get; set; }

public String MaritalStat { get; set; }

public int NrOfChildren { get; set; }

}

}

CRUD

文件放在 EmpMasterDAO.cs 文件中。

using System;

using System.Data;

using System.Data.Odbc;

namespace HanaTest

{

public class EmpMasterDAO

{

public EmpMasterDAO() { }

public OdbcConnection getConnection() {

String connStr = "Driver={HDBODBC};ServerNode=192.168.1.100:30015;uid=STONE;pwd=haapwd;";

var conn = new OdbcConnection(connStr);

return conn;

}

public DataTable listAll() {

OdbcConnection conn = this.getConnection();

String sql = "SELECT * FROM STONE.EMP_MASTER";

conn.Open();

OdbcCommand selectCmd = new OdbcCommand(sql, conn);

var adapter = new OdbcDataAdapter(selectCmd);

DataTable employeeTable = new DataTable("employees");

adapter.Fill(employeeTable);

conn.Close();

return employeeTable;

}

public int insert(EmpMasterEntity employee) {

OdbcConnection conn = this.getConnection();

String sql = "INSERT INTO STONE.EMP_MASTER VALUES(?,?,?,?,?,?,?,?)";

OdbcCommand cmd = new OdbcCommand(sql, conn);

// parameters

cmd.Parameters.AddWithValue("@emp_id", employee.EmpID);

cmd.Parameters.AddWithValue("@gender", employee.Gender);

cmd.Parameters.AddWithValue("@age", employee.Age);

cmd.Parameters.AddWithValue("@email", employee.EMail);

cmd.Parameters.AddWithValue("@phoneNr", employee.PhoneNr);

cmd.Parameters.AddWithValue("@education",employee.Education);

cmd.Parameters.AddWithValue("@maritalStat", employee.MaritalStat);

cmd.Parameters.AddWithValue("@nrOfChildren", employee.NrOfChildren);

conn.Open();

int count = cmd.ExecuteNonQuery();

conn.Close();

return count;

}

public int delete(String empId) {

OdbcConnection conn = this.getConnection();

String sql = "DELETE FROM STONE.EMP_MASTER WHERE EMP_ID=?";

OdbcCommand cmd = new OdbcCommand(sql, conn);

cmd.Parameters.AddWithValue("@empid", empId);

conn.Open();

int count = cmd.ExecuteNonQuery();

conn.Close();

return count;

}

}

}

调用 CRUD

在 Unit Test 中进行测试。注意 unit test 要根据 obdc 驱动的版本来选择合适的处理器架构 (菜单: Test -> Test Settings -> Default Processor Architecture)。因为我安装的是 64 位版,所以选用 x64。下面是测试代码:

using System;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using HanaTest;

namespace UnitTestProject1

{

[TestClass]

public class UnitTest1

{

[TestMethod]

public void test_insert() {

EmpMasterDAO empDAO = new EmpMasterDAO();

EmpMasterEntity empEntity = new EmpMasterEntity();

empEntity.EmpID = "9001";

empEntity.Gender = "Male";

empEntity.Age = 20;

empEntity.EMail = "test@qq.com";

empEntity.PhoneNr = "13800138000";

empEntity.Education = "Bachelor";

empEntity.MaritalStat = "Single";

empEntity.NrOfChildren = 0;

empDAO.insert(empEntity);

}

[TestMethod]

public void test_delete() {

EmpMasterDAO empDAO = new EmpMasterDAO();

int count = empDAO.delete("9001");

Console.WriteLine(count);

}

}

}

参考

php连接sap hana数据库,SAP Hana 数据库编程接口 - ODBC相关推荐

  1. mongodb数据库淘汰_Mongodb数据库学习

    数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls) 优点 : 数据可以长期保存 可以存储大量的数据 使用简单 缺点 : 数据一致性差 数据查找修改不方 ...

  2. 数据库访问抽象层系列-1(介绍数据库编程接口及数据库访问抽象层概念)

    摘要 本人最近完成了一个封装数据库访问抽象层的项目.我们开发的数据库访问抽象层作为分布式集群基础平台的一个组件.可以支持不同数据库编程接口(OCI.mysql.ODBC.pgsql)等.本系列博客主要 ...

  3. Android数据库 之 SQLite数据库

    一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于20 ...

  4. android 创建文件夹_Android安全(四)数据库 之 SQLite数据库

    每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...

  5. SAP HANA Cloud 学习教程之二: 如何往SAP BTP 上 HANA Cloud 实例的数据库表里插入数据

    这个教程的前一篇文章,SAP HANA Cloud 学习教程之一: 如何在 SAP BTP 上创建 SAP HANA Cloud 实例,我们已经成功在 SAP BTP HANA Cloud Servi ...

  6. 利用 Node.js 实现 SAP Hana 数据库编程接口

    为什么80%的码农都做不了架构师?>>>    自 SAP HANA SP 11 之后,可以使用 Node.js 作为 Hana 的编程接口.SAP 将 Application se ...

  7. SAP移动战略与HANA已为BI爆发做好准备

    轻点 SAP BusinessObjects 工具,进入BPI模块,就可以看到不同的产品线情况.从中选取最前三项或者前四项,就可以看到这些业务中有多少来自现有客户,有多少来自潜在客户,由谁负责,还能按 ...

  8. 【SAP Hana】SAP HANA协同开发代码管理应用入门

    SAP HANA协同开发代码管理应用入门 前言 1.创建本地工作区 2.同步服务器资源 3.代码管理协同开发流程 3.1.开发前获取最新代码 Check Out 3.2 创建代码(此处以脚本为例) 3 ...

  9. SAP内存计算--HANA 走近SAP HANA

    第一章 走近SAP HANA 摘要:拿到这本书的读者,相信您对SAP HANA已经有所耳闻.对于这样一个 基于内存计算创新型的高性能数据处理平台,我们应该如何去理解和应用?如何 将它融入到我们现有的企 ...

最新文章

  1. Oracle Drop表并未直接删除 drop table xx purge
  2. 解决 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)异常
  3. IDEA:Debug使用详解(含2018版特性)
  4. mysql5.5 配置_MySQL5.5 安装配置方法教程
  5. 计算机辅助教育会议,子会议1:学习科学、计算机辅助合作学习、智慧教育
  6. 用c语言输出魔方阵答案,如何用C语言输出一个1—16 组成的4*4的魔方阵
  7. 1088红包数字代表什么_微信发红包的数字含义?各种红包代表着什么,你有没有发错呢?...
  8. 通过axis2解析sap 发布的webService接口,新手到进阶,多种方法。
  9. 台式机黑苹果Mac OS Big Sur 11.3.1安装指引
  10. CIH病毒的分析与清除
  11. 大数据中数据清理怎么做的_大数据清洗的方法 数据清洗的基本流程 | 星云联动...
  12. 什么是智能无损网络?
  13. 最强GTD时间管理工具:OmniFocus Pro 3 for Mac支持big sur
  14. 文本文件的加密与解密
  15. 这就是搜索引擎_这就是搜索引擎如何增强种族主义
  16. php考试报名,报名系统
  17. HIVE学习系列——Hive操作
  18. Linux 自定义回收站
  19. Centos7离线安装gcc4.8
  20. Java源码之从零单排--ArrayList

热门文章

  1. python中pivot table 透视表实例
  2. Windows上如何手动安装Perl模块(ActivePerl)
  3. C语言--gets、puts、scanf、printf函数详细用法与区别(小白也能看懂,看不懂私信骂我)
  4. java实现基因牛的繁殖
  5. 中日韩大字符集文字编码的比较研究
  6. 《人类简史》十四、开启未来(上)——智人的灭亡
  7. undefined和“undefined”
  8. java制作月度报表_Java报表制作详细过程
  9. 银行和服务商聚合支付收款码的区别在哪?
  10. 俞军:用户不是人,是需求的集合