适用于.NET Core
注
仅适用于 .NET 6 及更高版本,不适用于 SmartEDB for .NET Framework。
概述
SmartESQL 的 C# API 可在多种操作系统和硬件平台上与微软的 .NET Core™ 6.0 配合使用,包括 Linux/ARM。
适用于微软的 .NET Core™ 6.0 的 SmartEDB .NET 模块可以从 McObject 网站下载。.NET Core™ 6.0可以在微软网站下载。
SmartEDB 的 .NET 模块为在 .NET Core 下运行的应用程序提供了基于 SQL 的 SmartEDB 数据库接口。
它支持 SmartESQL 的本地和远程操作,以及通过 SQL 数据定义语言(DDL)实现动态架构定义。
请注意,序列、通过类装饰器实现的静态模式定义以及类级别对象数据库访问目前尚不为 SmartEDB 的 .NET Core 模块所支持。
快速开始
请确保已安装 SmartEDB 软件包。环境变量 MCO_ROOT 必须已定义,并指向主 SmartEDB 软件包的安装位置,以便正确设置 SmartEDB for .NET Core:
export MCO_ROOT=/your/path/to/SmartEDB
将 SmartEDB for .NET Core 软件包解压到您拥有足够权限的目录中。 (对于 Linux 平台)构建或(对于 Windows 平台)复制支持的动态库。在 Windows 上也可以构建支持库,但需要安装 Visual Studio。
Linux 构建
make
Windows copy
make.bat
Windows 构建。如果您计划从命令行构建,请打开 VS2022 的开发命令提示符,切换到 SmartEDB .NET Core 模块的安装目录,然后输入:
msbuild
Windows 构建(替代方案)。打开提供的解决方案文件并进行构建。
构建一个示例:
cd netcore/samples/SQL
dotnet build
并运行:
dotnet run
开发
SmartEDB 环境和数据库通过 Database 类进行控制:
Database db = new Database(mode);
mode
是一个基于枚举的位掩码,用于定义要加载和启用的 SmartEDB 特性集。请注意,这些特性在运行时无法更改。有关可能值的详细说明,请参阅下文。
创建数据库实例后,使用 Database.Parameters 指定的参数打开数据库。参数及其与 SmartEDB mco_params_t 核心运行时结构的关系详见下文。
打开数据库后,可以创建数据库设备。SmartEDB 内存数据库运行在预先分配的固定大小内存段中。对于持久性数据库,需配置三个额外存储位置:数据库缓存、持久性存储和日志文件。此外,SQL 语句执行还会使用堆内存。
有关内存管理的详细信息,请参阅文档。
要创建数据库段,使用 Database.Device 类。基本纯内存数据库仅需一个段,其运行时配置如下所示。
devs = new Database.Device[1];
devs[0] = new Database.PrivateMemoryDevice(Database.Device.Kind.Data, 16*1024*1024 );
此代码片段为内存数据库操作分配了一个 16MB 的内存段。
现在我们可以打开数据库了:
db.Open("sqldb", parameters, devs);
下一步是创建 SQL 本地连接对象,该对象将创建并连接 SQL 引擎到数据库:
SqlLocalConnection con = db.ConnectSql();
一旦数据库连接成功,即可投入使用。此时事务处理已启用,可以创建表和索引,向数据库中插入数据,并使用标准 SQL'89 应用其他 SQL 语句(如 SELECT 语句)。有关 SmartEDB SQL 语言及其可用扩展的详细说明,请点击相关文档文章。应用程序的代码流程模式如下所示。
创建表:
con.ExecuteStatement("create table MyTable (pk int primary key, value varchar)");
显式地启动一个事务:
con.StartTransaction(Database.TransactionType.ReadWrite);
插入数据:
con.ExecuteStatement("insert into MyTable (pk,value) values (?,?)", 2012, "Good bye");
con.ExecuteStatement("insert into MyTable (pk,value) values (?,?)", 2013, "Hello");
提交更改:
con.CommitTransaction();
查找并遍历结果集:
using (SqlResultSet result = con.ExecuteQuery("select pk,value from MyTable where pk>=?", 2013))
{
foreach (string column in result.ColumnNames)
{
Console.Write(column + ", ");
}
Console.WriteLine();
foreach (SqlTuple tuple in result)
{
Console.WriteLine(tuple[0] + ", " + tuple["value"]);
}
}
完成之后,连接应当关闭:
con.Disconnect();
然后数据库被关闭:
db.Close();
如需更多详情,请参阅适用于 .NET Core 和原生 C 的 SmartEDB 和 SmartESQL 示例。