因为中美之间的科技战越来越激烈,国产化已经刻不容缓,在软件领域,国产化包括操作系统、数据库、中间件以应应用软件。面向实际应用的不同领域,很多管理系统的数据库逐步在使用国产数据库,以华为的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数据库的安装比较简单,可以参考一下官网上的文档。
环境的准确,按下面的步骤
1.安装依赖包
2.关闭防火墙
3.关闭 selinux
4.关闭交换内存
5.修改主机名
要安装数据库,修改安装配置cluster_config.xml文件,根据配置安装
gs_install -X /opt/software/openGauss/cluster_config.xml
使用命令行 gs_om -t status
数据库安装完成后,默认生成名称为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=#
这里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的。
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}");
}
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");
}
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,当然还支持很多功能,就不一一演示,软件国产化还需要大家一起努力。