一、概述
本文以示例的形式介绍 Windows10下C#通过EFCore的方式操作GBase 8s 数据库的方法,仅保证使用相同环境下的测试能通过,不同的环境下仅供参考。
示例使用的数据库版本为GBase8sV8.8_TL_3.5.1_x86_64,CSDK的版本为clientsdk_3.5.1_1_4afd74_WIN2003_x86_64(Windows)。
示例使用的数据库服务器信息如下:
表 1 示例使用的数据库信息
| 序号 | 参数名称 | 示例参数值 | 说明信息 |
|---|---|---|---|
| 1 | 主机名称 | 192.168.137.66 | 数据库服务器的主机名称或IP地址 |
| 2 | 端口号 | 6666 | 数据库服务器使用的端口号 |
| 3 | 数据库服务名称 | yangzai | 数据库服务名称(DBSERVERNAME) |
| 4 | 数据库名称 | testdb | 数据库名称(DBNAME) |
| 5 | 数据库字符集 | zh_CN.utf8 | 数据库字符集(DB_LOCALE) |
| 6 | 客户端字符集 | zh_CN.utf8 | 客户端字符集(CLIENT_LOCALE) |
| 7 | GLU支持 | 1 | GLU支持(GL_USEGLU) |
数据库及CSDK的下载地址:
https://www.gbase.cn/download/gbase-8s-1?category=INSTALL_PACKAGE
二、Windows下的CSDK安装及连接配置
1、安装CSDK
CSDK需要使用管理员权限进行安装。解压CSDK的安装包,以管理员身份运行installclientsdk.exe开始安装。
安装介绍协议页面,需要将滚动条拉到最下面,才可以点击接受协议的单选框。
设置安装路径,这里我使用 C:\Program Files\GBase Client-SDK 目录。
安装的功能浏览,CSDK 默认安装的组件包括:OLEDB 运行环境、C++接口、ESQL\C、.NET驱动、客户端程序 LIBDMI、ODBC 驱动、通用数据库工具和 GLS。
安装组件预览,执行安装。
至此,Windows版的CSDK安装完毕!
2、配置CSDK
安装完成后,需要对客户端连接进行设置。在开始菜单里找到 GBase Client-SDK 4.10(64-bit) 目录,使用 管理员权限运行 打开 Setnet32 程序。
在服务器信息(Server Information)选项卡中设置数据库服务器信息:
Server Information选项卡设置项说明:
| 设置项 | 说明 |
|---|---|
| GBase 8s Server | 需要连接的数据库实例名称 |
| HostName | 数据库ip地址 |
| Protocolname | 连接方式 |
| Service Name | 端口号 |
在主机信息(Host Information)选项卡中设置主机信息:
Host Information选项卡设置项说明:
| 设置项 | 说明 |
|---|---|
| Current Host | 选择刚才设定的HostName |
| User Name | 用户名 |
| Password Option | 密码选项 |
| Password | 密码 |
三、C#操作数据库
这里我使用的是 Visual Studio 2022 社区版开发工具。
1、创建并配置项目
打开Visual Studio 2022,创建新项目,选择控制台应用,点击下一步。
创建控制台应用程序,指定项目名称为 EFCoreGBase,位置等,点击下一步。
框架信息选择 .NET Core 2.1,点击创建。
注意:框架版本不要选择 .NET 8.0或者其他相关版本,因为不兼容!!!如果没有 .NET Core 2.1,需要自行安装一下。
2、添加相关依赖包
点击菜单栏中的【工具】,选择【NuGet 包管理器】下面的【管理解决方案的NuGet程序包】,弹出界面如下图所示:
接着,我们搜索以下3个包进行安装:
- GeneralData.EntityFrameworkCore.GBase(1.0.7_1)
注:此包的下载地址为:https://gbasedbt.com/dl/EFcore/ EFCore3.1.3_1.0.7_1_win_x86_64.tar
- Microsoft.Entityframeworkcore.Tools(3.1.3版本)
- Microsoft.Entityframeworkcore.Design(3.1.3版本)
安装完毕后如下图所示:
注意:建议每个包的版本严格按照本文档中所述进行下载安装。
3、C#代码示例
这里采用Code-First方式,先定义自己的模型类,然后通过迁移来创建数据库表。
①. 定义你自己的类,这些类将映射到数据库表
在项目中新建Models文件夹,然后在此文件夹中添加实体类Blog.cs和上下文类BloggingContext.cs
// Blog.cs文件
namespace EFCoreGBase.Models
{
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public int? Rating { get; set; }
}
}
// BloggingContext.cs文件
using Microsoft.EntityFrameworkCore;
namespace EFCoreGBase.Models
{
public class BloggingContext: DbContext
{
public DbSet<Blog> Blog { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasData(
new Blog { BlogId = 1, Url = @"https://devblogs.microsoft.com/dotnet", Rating = 1 },
new Blog { BlogId = 2, Url = @"https://mytravelblog.com/", Rating = 2 });
}
②. 使用EF迁移工具来创建数据库表
在下方的程序包管理器控制台中运行如下代码:
Add-Migration blog
Update-Database
第一步完成后,项目中会生成名为Migrations的文件夹;第二步完成后,testdb数据库中会自动生成blog表,并且存在2条初始数据。
注意:
上述的Add-Migration blog中blog为迁移名称,可自行更改
Update-Database进行数据库更改
③. 操作数据库
// Program.cs文件
using System;
using System.Linq;
using EFCoreGBase.Models;
namespace EFCoreGBase
{
public class Program
{
static void Main(string[] args)
{
var context = new BloggingContext();
// Create,向表中增加数据
Console.WriteLine("Insert a new blog");
context.Add(new Blog { Url = "http://blogs.msdn.com/adonet", Rating = 99 });
context.SaveChanges();
// Update,修改blogid为1的url值
Console.WriteLine("Update the blog");
context.Update(new Blog { BlogId = 1, Url = "I'm EF Core URL!!!" });
context.SaveChanges();
// Delete,删除指定id的数据
Console.WriteLine("Delete the blog");
context.Remove(new Blog { BlogId = 2 });
context.SaveChanges();
// Read,查询表中的数据
Console.WriteLine("Querying for a blog");
Console.WriteLine("表中数据总行数为: " + context.Blog.Count());
var blogs = context.Blog.ToList();
foreach (var blog in blogs)
{
Console.WriteLine($"Blog ID: {blog.BlogId}, URL: {blog.Url}, Rating: {blog.Rating}");
}
}
}
}
④. 程序运行结果
运行Program.cs程序代码,执行Debug测试连接到数据库结果。




