因为中美之间的科技战越来越激烈,国产化已经刻不容缓,在软件领域,国产化包括操作系统、数据库、中间件以应应用软件。面向实际应用的不同领域,很多管理系统的数据库逐步在使用国产数据库,以华为的openGauss为代表,非常适合国产数据库替换方案,openGauss是一款开源关系型数据库管理系统,openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。

目前很多应用系统大多是JAVA和openGauss的结合,很少有.Net与openGauss结合,很多还是基于ODBC方案,ODBC是Windows下的产物,如果要国产化,这种方案是不可取的。目前市面上有很多.NET开发的应用系统,很多采用C#语言开发,因为.NET Core是一个开源跨平台的开发平台,.NET Core是更加符合安可标准的开发平台,所以软件国产化少不它。 目前.NET Core和Java都是开源跨平台的,我们可以来比较一下.NET Core和Java的开源协议,.NET Core是以MIT协议开源, Java是GPL协议开源,相比较而言,应用系统国产化,采用.NET Core也是种可选方案。

本文就以C#和openGauss展示如何在C#中对openGauss编程。

一、openGauss安装

openGauss数据库的安装比较简单,可以参考一下官网上的文档。

1.1、安装前准备

环境的准确,按下面的步骤

1.安装依赖包

2.关闭防火墙

3.关闭 selinux

4.关闭交换内存

5.修改主机名

1.2、配置安装XML文件

要安装数据库,修改安装配置cluster_config.xml文件,根据配置安装

1.3、执行安装

gs_install -X /opt/software/openGauss/cluster_config.xml

1.4、安装验证

使用命令行 gs_om -t status

1.5、数据库访问设置

数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

其中postgres为需要连接的数据库名称,15400为数据库主节点的端口号,即XML配置文件中的dataPortBase的值。请根据实际情况替换。

执行以下命令:

gsql -d postgres -p 15400

显示以下信息代表连接成功

gsql ((openGauss 3.1.0 build 4e931f9a) compiled at 2022-09-29 14:19:46 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

openGauss=#

二、openGauss配置

这里C#采用 Npgsql访问openGauss,因为Npgsql不支持sha256加密,所以要进行设置。需要将服务器端的认证加密更改为md5,注意,如果只改成MD5加密码,修改后Data Studio管理工具又无法连接。

这里要设置 pg_hba.conf和postgresql.conf

postgresql.conf,将password_encryption_type修改为1,同时支持sha256和md5

pg_hba.conf,根据需要设置哪个用户使用什么加密方式

修改完成后,需要使用 重启下数据库gs_om -t stop 然后 gs_om -t start,同时还要修改一次密码,这样密码才会存储为sha256和md5加密的字符串。

三、代码编写

创建一个.net core控制台程序

NuGet安装Npgsql包,Ngpsql是Npgsql is the open source .NET data provider for PostgreSQL。它本是用于PostgreSQL的,因为openGauss是基于开源的PostgreSQL的,所以它也是可以用于openGauss的。

3.1、获取数据库版本

using System;

using System.Data;

using System.Data.Common;

using Npgsql;

static void Main(string[] args)

{

using var con = newNpgsqlConnection("PORT=15400;DATABASE=mydb;HOST=192.168.86.219;PASSWORD=Abc@1234;USER ID=myuser");

con.Open();

var sql = "SELECT version()";

using var cmd = new NpgsqlCommand(sql, con);

var version = cmd.ExecuteScalar().ToString();

Console.WriteLine($"openGauss version: {version}");

}

3.2、创建表

using System;

using System.Data;

using System.Data.Common;

using Npgsql;

static void Main(string[] args)

{

using var con = newNpgsqlConnection("PORT=15400;DATABASE=mydb;HOST=192.168.86.219;PASSWORD=Abc@1234;USER ID=myuser");

con.Open();

using var cmd = new NpgsqlCommand();

cmd.Connection = con;

cmd.CommandText = "DROP TABLE IF EXISTS mytest";

cmd.ExecuteNonQuery();

cmd.CommandText = @"CREATE TABLE mytest(id SERIAL PRIMARY KEY, name VARCHAR(255), num INT)";

cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO mytest(name, num) VALUES('张三',10)";

cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO mytest(name, num) VALUES('李四',30)";

cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO mytest(name, num) VALUES('刘五',40)";

cmd.ExecuteNonQuery();

Console.WriteLine("Table mytest created");

}

3.3、获取数据

using System;

using System.Data;

using System.Data.Common;

using Npgsql;

static void Main(string[] args)

{

using var con = newNpgsqlConnection("PORT=15400;DATABASE=mydb;HOST=192.168.86.219;PASSWORD=Abc@1234;USER ID=myuser");

try

{

if (sqlConn.State != ConnectionState.Open)

sqlConn.Open();

using (NpgsqlCommand cmd = new NpgsqlCommand("select * from mytest", sqlConn))

{

NpgsqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

Console.WriteLine($"{sdr.GetName(0),-4} {sdr.GetName(1),-10}{sdr.GetName(2),-20} ");

while (sdr.Read())

{

Console.WriteLine($"{sdr.GetInt32(0),-4} {sdr.GetString(1),-10}{sdr.GetInt32(2),-20} ");

}

}

}

catch (System.Exception ex)

{

sqlConn.Close();

}

}

四、结束语

这篇文章简单介绍了在 .net core 环境中使用Npgsql对国产华为openGauss数据库的访问。

国产数据库未来是我们国产化发展趋势,拥有自主权不受他人限制,全面使用国产系统和国产数据库才有未来。

以上只是简单的处理查询和执行SQL,当然还支持很多功能,就不一一演示,软件国产化还需要大家一起努力。

举报/反馈

人生学习课堂

1.8万获赞 929粉丝
学无止境,快乐人生,分享快乐
关注
0
0
收藏
分享