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方式连接到数据库 结束

标签: odbc, GBase, C#, dotnet

添加新评论