Linux下C#通过ODBC方式连接到GBase 8s数据库
操作系统:CentOS 7.8 64-bit
软件需求:
GBase 8s CSDK 3.0.0_1
unixODBC 2.3.7
dotnet-sdk-3.1
1,系统环境安装及确认
1.1 unixODBC安装及确认
CentOS 7.8默认的unixODBC版本为2.3.1,需要升级为2.3.7
加载适用于Microsoft的Linux存储库
[root@localhost ~]# rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
清理yum缓存
[root@localhost ~]# yum clean all
升级/安装unixODBC
[root@localhost ~]# yum -y install unixODBC unixODBC-devel
确认unixODBC已经安装及版本
root@localhost ~]# rpm -qa | grep unixODBC
unixODBC-devel-2.3.7-1.rh.x86_64
unixODBC-2.3.7-1.rh.x86_64
1.2 GBase 8s CSDK/ODBC驱动安装及确认
CSDK可以使用手动安装的方式,或者使用绿色版本,但均需要配置环境变量。
从gbasedbt.com下载绿色版CSDK
[root@localhost ~]# wget https://gbasedbt.com/dl/odbc/GBase8s_3.0.0_1-Linux64-ODBC-Driver.tar.gz --no-check-certificate
解压到特定目录下,如/opt,生成的目录为/opt/gbase8s-odbc-driver
[root@localhost ~]# tar -zxf GBase8s_3.0.0_1-Linux64-ODBC-Driver.tar.gz -C /opt/
设置环境变量/etc/profile
export GBASEDBTDIR=/opt/gbase8s-odbc-driver
export GBASEDBTSERVER=gbase01
export PATH=$GBASEDBTDIR/bin:$PATH
export GBASEDBTSQLHOSTS=$GBASEDBTDIR/etc/sqlhosts
export LD_LIBRARY_PATH=$GBASEDBTDIR/lib:$GBASEDBTDIR/lib/esql:$GBASEDBTDIR/lib/cli:$LD_LIBRARY_PATH
export ODBCINI=/opt/gbase8s-odbc-driver/odbc.ini
设置GBASEDBTSQLHOSTS配置文件
# GBASEDBTSQLHOSTS
gbase01 onsoctcp a01.gbasedbt.com 9088
重新登陆,通过esql -V命令确认CSDK已经安装,如下:
[root@localhost ~]# esql -V
GBase CSDK Version 4.10, GBASE-ESQL Version 4.10.FC4G1_3.0.0
Software Serial Number AAA#B000000
2,ODBC配置
2.1 ODBC配置文件
编辑/etc/odbcinst.ini配置文件,增加GBase 8s ODBC驱动注册信息
; /etc/odbcinst.ini
; ODBC Driver for GBase 8s
[GBase ODBC DRIVER]
Driver=/opt/gbase8s-odbc-driver/lib/cli/iclit09b.so
Setup=/opt/gbase8s-odbc-driver/lib/cli/iclit09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.51
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y
创建修改$ODBCINI楝文件,增加GBase 8s数据库连接信息,特别注意需要的环境变量都加上。
;---------------------------------------------------------------------------
; GBase ODBC Sample File
;
; File: odbc.ini
;
;---------------------------------------------------------------------------
[ODBC Data Sources]
testdb=GBase ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[testdb]
Driver=/opt/gbase8s-odbc-driver/lib/cli/iclis09b.so
;Driver=GBase ODBC DRIVER
Description=GBase ODBC DRIVER
Database=testdb
LogonID=gbasedbt
pwd=GBase123
Servername=gbase01
CursorBehavior=0
CLIENT_LOCALE=zh_CN.utf8
DB_LOCALE=zh_CN.utf8
TRANSLATIONDLL=/opt/gbase8s-odbc-driver/lib/esql/igo4a304.so
;
; UNICODE connection Section
;
[ODBC]
;uncomment the below line for UNICODE connection
UNICODE=UCS-2
;
; Trace file Section
;
Trace=0
TraceFile=/tmp/odbctrace.out
InstallDir=/opt/gbase8s-odbc-driver
TRACEDLL=idmrs09a.so
2.2 验证ODBC配置
通过isql和iusql(isql的unicode连接方式)命令检查ODBC配置
[root@localhost etc]# isql -v testdb
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> ^C
[root@localhost etc]# iusql -v testdb
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
3,安装dotnet
3.1 安装dotnet core sdk 3.1(安装自己需要的版本)
使用yum安装Microsoft的Linux存储库中的dotnet-sdk-3.1
[root@localhost ~]# yum -y install dotnet-sdk-3.1
确认版本
[root@localhost ~]# dotnet --version
3.1.418
4,创建工程,编写程序测试,执行测试。
使用普通用户创建目录,创建工程
[liaosnet@localhost ~]$ mkdir -p Project/TestCsODBC
[liaosnet@localhost ~]$ cd Project/TestCsODBC/
创建工程
[liaosnet@localhost TestCsODBC]$ dotnet new console
查看创建的Hello World 工程
[liaosnet@localhost TestCsODBC]$ ls -al
总用量 8
drwxrwxr-x. 3 liaosnet liaosnet 60 5月 9 15:19 .
drwxrwxr-x. 3 liaosnet liaosnet 24 5月 9 15:19 ..
drwxrwxr-x. 2 liaosnet liaosnet 183 5月 9 15:19 obj
-rw-rw-r--. 1 liaosnet liaosnet 192 5月 9 15:19 Program.cs
-rw-rw-r--. 1 liaosnet liaosnet 178 5月 9 15:19 TestCsODBC.csproj
工程中增加需要用到的System.Data.Odbc包,版本为6.0.0
[liaosnet@localhost TestCsODBC]$ dotnet add package System.Data.Odbc -v 6.0.0
增加包完成后,在TestCsODBC.csproj配置文件中增加PackageReference
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.Odbc" Version="6.0.0" />
</ItemGroup>
</Project>
编辑Program.cs程序文件,内容如下:
using System;
using System.Data;
using System.Data.Odbc;
namespace TestCsODBC
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("\n 测试Linux下dotnet通过ODBC方式连接到数据库\n");
// odbcinst.ini里的Driver名称,DSN名称
String connStr = "Driver={GBase ODBC DRIVER};DSN=testdb";
/*
// 如果不使用DSN方式,以下参数均需要加上,以下参数为缩写格式。
String connStr = "Driver=/opt/gbase8s-odbc-driver/lib/cli/iclit09b.so;" +
"Host=a01.gbasedbt.com;SERV=9088;PROT=onsoctcp;SRVR=gbase01;" +
"DB=testdb;DLOC=zh_CN.utf8;CLOC=zh_CN.utf8;" +
"UID=gbasedbt;PWD=GBase123;" +
"TDLL=/opt/gbase8s-odbc-driver/lib/esql/igo4a304.so";
*/
OdbcConnection odbcconn = new OdbcConnection(connStr);
try
{
odbcconn.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
using (OdbcCommand odbccmd = odbcconn.CreateCommand())
{
// drop table
odbccmd.CommandText = "drop table if exists company";
odbccmd.ExecuteNonQuery();
// create table
odbccmd.CommandText = "create table company(coid serial,coname varchar(255),coaddr varchar(255))";
odbccmd.ExecuteNonQuery();
// insert rows
odbccmd.CommandText = "insert into company values (0,'南大通用','天津市海泰绿色产业基地')";
odbccmd.ExecuteNonQuery();
odbccmd.CommandText = "insert into company values (0,'南大通用北京分公司','北京市朝阳区太阳宫')";
odbccmd.ExecuteNonQuery();
// update row
odbccmd.CommandText = "update company set coaddr = '天津市普天创新园' where coid = 1";
odbccmd.ExecuteNonQuery();
// select rows
odbccmd.CommandText = "select * from company";
OdbcDataReader dr = odbccmd.ExecuteReader();
while (dr.Read())
{
Console.WriteLine(" " + dr[0] + "\t" + dr[1] + "\t" + dr[2]);
}
}
Console.WriteLine("\n 测试Linux下dotnet通过ODBC方式连接到数据库 结束\n");
}
}
}
编译
[liaosnet@localhost TestCsODBC]$ dotnet build
运行测试程序
[liaosnet@localhost TestCsODBC]$ dotnet run
测试Linux下dotnet通过ODBC方式连接到数据库
1 南大通用 天津市普天创新园
2 南大通用北京分公司 北京市朝阳区太阳宫
测试Linux下dotnet通过ODBC方式连接到数据库 结束