在现代软件开发中,数据库连接和操作是任何应用程序的核心部分。本文将介绍如何在 .NET 环境下,使用 Npgsql 驱动连接 KaiwuDB,并执行基本的数据库操作,包括创建表、插入数据和查询操作。我们假设您已经安装并配置好了 KaiwuDB 数据库,并且熟悉基本的数据库操作。
1. 前提条件
在开始之前,确保以下环境已经准备好:
-
安装 .NET 6.0 和 Visual Studio C# 2022:确保您已经安装了 .NET 6.0 SDK 和 Visual Studio 2022。可以从 微软官方网站 下载并安装。
-
安装和运行 KaiwuDB:您需要确保 KaiwuDB 数据库已经正确安装并运行,同时完成基本的配置,包括数据库认证方式。
-
数据库用户:创建一个具有表级及以上操作权限的用户。
2. 创建 .NET 控制台项目
首先,我们需要创建一个 .NET 控制台应用程序,来实现与 KaiwuDB 的连接操作。在命令行中,运行以下命令:
dotnet new console -o kaiwudb-test-app
该命令将会在 kaiwudb-test-app
目录下创建一个新的控制台应用程序。进入该目录:
cd kaiwudb-test-app
3. 安装 Npgsql 包
接下来,您需要安装用于连接 PostgreSQL 数据库的 Npgsql 驱动。运行以下命令来安装 Npgsql 包:
dotnet add package Npgsql
4. 编辑 Program.cs 文件
在项目目录中,找到自动生成的 Program.cs
文件,替换其内容为以下示例代码:
using System;
using System.Data;
using System.Net.Security;
using Npgsql;namespace Example
{class MainClass{static void Main(string[] args){var connStringBuilder = new NpgsqlConnectionStringBuilder();connStringBuilder.Host = "172.18.139.126"; // 数据库主机地址connStringBuilder.Port = 26257; // KaiwuDB 的端口connStringBuilder.Username = "test"; // 数据库用户名connStringBuilder.Password = "123"; // 数据库密码connStringBuilder.Database = "bank"; // 使用的数据库名称// 调用方法执行数据库操作Simple(connStringBuilder.ConnectionString);}static void Simple(string connString){using (var conn = new NpgsqlConnection(connString)){conn.Open();// 创建 "accounts" 表using (var cmd = new NpgsqlCommand("CREATE TABLE IF NOT EXISTS accounts (id INT PRIMARY KEY, balance INT)", conn)){cmd.ExecuteNonQuery();}// 插入两行数据到 "accounts" 表using (var cmd = new NpgsqlCommand()){cmd.Connection = conn;cmd.CommandText = "UPSERT INTO accounts(id, balance) VALUES(@id1, @val1), (@id2, @val2)";cmd.Parameters.AddWithValue("id1", 1);cmd.Parameters.AddWithValue("val1", 1000);cmd.Parameters.AddWithValue("id2", 2);cmd.Parameters.AddWithValue("val2", 250);cmd.ExecuteNonQuery();}// 查询并输出 "accounts" 表中的余额Console.WriteLine("Initial balances:");using (var cmd = new NpgsqlCommand("SELECT id, balance FROM accounts", conn))using (var reader = cmd.ExecuteReader())while (reader.Read())Console.Write("\taccount {0}: {1}\n", reader.GetValue(0), reader.GetValue(1));// 创建时间序列数据库using (var cmd = new NpgsqlCommand("CREATE TS DATABASE db_TimeSeries", conn)){cmd.ExecuteNonQuery();}// 创建时间序列表using (var cmd = new NpgsqlCommand("CREATE TABLE db_TimeSeries.table1 " + "(k_timestamp timestamp NOT NULL, " +"voltage double, " +"current double, " +"temperature double " +") TAGS ( " +"number int NOT NULL) " +"PRIMARY TAGS(number) " + "ACTIVETIME 3h; ", conn)){cmd.ExecuteNonQuery();}// 向时间序列表插入数据using (var cmd = new NpgsqlCommand("INSERT INTO db_TimeSeries.table1 " +"VALUES ( " +"'2024-07-01 10:00:00', " +"220.0, 3.0, 20.5, " +"123); ", conn)){cmd.ExecuteNonQuery();}// 查询并输出时间序列表的数据Console.WriteLine("Data from time series table db_TimeSeries.table1:");using (var cmd = new NpgsqlCommand("SELECT * from db_TimeSeries.table1", conn))using (var reader = cmd.ExecuteReader())while (reader.Read())Console.Write("\tTime: {0}\tvoltage: {1}\tcurrent: {2}\ttemperature: {3}\tnumber: {4}\n", reader.GetValue(0), reader.GetValue(1), reader.GetValue(2), reader.GetValue(3), reader.GetValue(4));}}}
}
上述代码实现了以下操作:
-
连接到 KaiwuDB 数据库。
-
创建一个名为
accounts
的表,并插入两行数据。 -
查询
accounts
表中的数据并输出。 -
创建时间序列数据库
db_TimeSeries
。 -
创建时间序列表,并插入一条时间序列数据。
-
查询并输出时间序列表的数据。
5. 检查项目文件
确保 kaiwudb-test-app.csproj
文件中包含了 Npgsql 依赖项。检查或手动修改项目文件如下:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net6.0</TargetFramework><RootNamespace>kaiwudb_test_app</RootNamespace><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable></PropertyGroup><ItemGroup><PackageReference Include="Npgsql" Version="8.0.3" /></ItemGroup>
</Project>
6. 运行程序
在终端中执行以下命令来运行程序:
dotnet run
程序将会连接 KaiwuDB,执行创建表、插入数据、查询数据等操作,并在控制台输出相关信息。
7. 输出结果
运行结果将显示账户余额和时间序列数据。以下是一个示例输出:
Initial balances:account 1: 1000account 2: 250
Data from time series table db_TimeSeries.table1:Time: 2024-07-01 10:00:00 voltage: 220.0 current: 3.0 temperature: 20.5 number: 123
总结
通过使用 Npgsql 驱动,您可以轻松地在 .NET 环境中连接 KaiwuDB,并执行各种数据库操作。本文展示了如何进行数据库连接、创建表、插入数据和查询操作,为开发者提供了一个清晰的参考示例。在实际应用中,您可以根据自己的需求扩展功能,进行更复杂的数据操作。