如何在 .NET 环境中使用 Npgsql 驱动连接 KaiwuDB

在现代软件开发中,数据库连接和操作是任何应用程序的核心部分。本文将介绍如何在 .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));
            }
        }
    }
}

上述代码实现了以下操作:

  1. 连接到 KaiwuDB 数据库。

  2. 创建一个名为 accounts 的表,并插入两行数据。

  3. 查询 accounts 表中的数据并输出。

  4. 创建时间序列数据库 db_TimeSeries

  5. 创建时间序列表,并插入一条时间序列数据。

  6. 查询并输出时间序列表的数据。

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: 1000
	account 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,并执行各种数据库操作。本文展示了如何进行数据库连接、创建表、插入数据和查询操作,为开发者提供了一个清晰的参考示例。在实际应用中,您可以根据自己的需求扩展功能,进行更复杂的数据操作。

相关推荐
CodeJourney.12 分钟前
DeepSeek与ECharts融合助力复杂图表高效制作
数据库·人工智能·算法·excel
1024熙34 分钟前
【Qt】——理解信号与槽,学会使用connect
前端·数据库·c++·qt5
寒也34 分钟前
识别法院PDF文件特定字段并插入数据库【正则表达式+本地化部署】
java·数据库·正则表达式·eclipse·pdf·达梦·ruoyi
IvanCodes39 分钟前
MySQL 视图
android·数据库·sql·mysql·oracle
小陆同学57439 分钟前
一次性执行多个.sql文件(PostgreSql)
数据库·postgresql
x_feng_x44 分钟前
MySQL数据库 - 锁
数据库·mysql
爱可生开源社区1 小时前
基础设施层变更后,业务真的还稳吗?来看问简智验平台的一次真实演示
数据库
LucianaiB1 小时前
C语言之高校学生信息快速查询系统的实现
java·c语言·数据库
神经星星2 小时前
入选AAAI 2025,浙江大学提出多对一回归模型M2OST,利用数字病理图像精准预测基因表达
数据库·人工智能·开源
Yang三少喜欢撸铁2 小时前
【通过docker部署redis7.0】
运维·数据库·redis·docker·容器