C# 使用Dapper与金仓数据库交互的实现步骤

 更新时间:2025年12月16日 09:57:45   作者:caifox菜狐狸  
本文主要介绍了C# 使用 Dapper 与金仓数据库交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

C# 配合 Dapper 与金仓数据库(KingbaseES)进行交互,可以使用如下方法实现

1. 安装必要的 NuGet 包

Install-Package Dapper
Install-Package Npgsql  # 金仓数据库兼容 PostgreSQL 协议

2. 基本配置和连接

using System.Data;
using Dapper;
using Npgsql;

// 连接字符串配置
string connectionString = "Host=localhost;Port=54321;Database=mykingbase;User Id=myuser;Password=mypassword;";

// 创建连接
using (IDbConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    
    // 执行查询
    var result = connection.Query<string>("SELECT version()");
    Console.WriteLine(result.First());
}

3. 完整的 CRUD 操作示例

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

public class UserRepository
{
    private readonly string _connectionString;

    public UserRepository(string connectionString)
    {
        _connectionString = connectionString;
    }

    // 查询
    public async Task<User> GetUserByIdAsync(int id)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        return await connection.QueryFirstOrDefaultAsync<User>(
            "SELECT * FROM users WHERE id = @Id", new { Id = id });
    }

    // 插入
    public async Task<int> InsertUserAsync(User user)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        var sql = @"INSERT INTO users (name, email, created_at) 
                   VALUES (@Name, @Email, @CreatedAt) RETURNING id";
        return await connection.ExecuteScalarAsync<int>(sql, user);
    }

    // 更新
    public async Task<int> UpdateUserAsync(User user)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        var sql = @"UPDATE users SET name = @Name, email = @Email 
                   WHERE id = @Id";
        return await connection.ExecuteAsync(sql, user);
    }

    // 删除
    public async Task<int> DeleteUserAsync(int id)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        return await connection.ExecuteAsync(
            "DELETE FROM users WHERE id = @Id", new { Id = id });
    }
}

4. 事务处理

public async Task<bool> TransferBalanceAsync(int fromUserId, int toUserId, decimal amount)
{
    using var connection = new NpgsqlConnection(_connectionString);
    connection.Open();
    
    using var transaction = connection.BeginTransaction();
    try
    {
        // 扣款
        await connection.ExecuteAsync(
            "UPDATE accounts SET balance = balance - @Amount WHERE user_id = @UserId",
            new { Amount = amount, UserId = fromUserId }, transaction);

        // 存款
        await connection.ExecuteAsync(
            "UPDATE accounts SET balance = balance + @Amount WHERE user_id = @UserId",
            new { Amount = amount, UserId = toUserId }, transaction);

        transaction.Commit();
        return true;
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

5. 连接字符串配置建议

appsettings.json 中配置:

{
  "ConnectionStrings": {
    "KingbaseConnection": "Host=localhost;Port=54321;Database=mydb;User Id=myuser;Password=mypassword;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=100;"
  }
}

注意事项:

  • 驱动选择:金仓数据库通常兼容 PostgreSQL 协议,因此使用 Npgsql 驱动
  • 数据类型映射:注意金仓数据库特有的数据类型可能需要特殊处理
  • 连接池:建议启用连接池以提高性能
  • 错误处理:妥善处理数据库连接异常和超时

这样配置后,你就可以像使用其他数据库一样,使用 Dapper 与金仓数据库进行高效的数据交互了。

到此这篇关于C# 使用Dapper与金仓数据库交互的实现步骤的文章就介绍到这了,更多相关C# Dapper与金仓数据库交互内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c# Parallel类的使用

    c# Parallel类的使用

    这篇文章主要介绍了c# Parallel类的使用,帮助大家实现数据与任务的并行,感兴趣的朋友可以了解下
    2020-11-11
  • C#图表算法之最短路径

    C#图表算法之最短路径

    本文详细讲解了C#图表算法之最短路径,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • c#测试本机sql运算速度的代码示例分享

    c#测试本机sql运算速度的代码示例分享

    本文代码目的很简单,就是使用c#测试一下本机sql运算的速度,使用循环往数据里大量插入数据,计算所用时间,大家参考使用吧
    2014-01-01
  • C# Email邮件发送功能 找回或重置密码功能

    C# Email邮件发送功能 找回或重置密码功能

    这篇文章主要为大家详细介绍了C# Email邮件发送功能,找回或重置密码功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 利用C#实现Window系统桌面锁定效果

    利用C#实现Window系统桌面锁定效果

    在实际开发中,我们有时需要实现类似"屏幕锁定"的效果,C# 作为一门强大的桌面应用开发语言,结合 Windows API 可以轻松实现这一功能,所以本文将通过调用 SetForegroundWindow 和 GetForegroundWindow 两个核心方法,实现一个简易但实用的屏幕锁定程序,需要的朋友可以参考下
    2025-05-05
  • C#设计模式之适配器模式与装饰器模式的实现

    C#设计模式之适配器模式与装饰器模式的实现

    创建型设计模式主要是为了解决创建对象的问题,而结构型设计模式则是为了解决已有对象的使用问题。本文将用C#语言实现结构型设计模式中的适配器模式与装饰器模式,感兴趣的可以了解一下
    2022-04-04
  • C#线程上异步执行方式(this.BeginInvoke)

    C#线程上异步执行方式(this.BeginInvoke)

    这篇文章主要介绍了C#线程上异步执行方式(this.BeginInvoke)方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • C#调用FFplay实现播放视频功能

    C#调用FFplay实现播放视频功能

    这篇文章主要为大家详细介绍了C#如何调用FFplay实现播放视频功能,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • C#如何使用系统默认应用程序打开文件

    C#如何使用系统默认应用程序打开文件

    本文介绍了如何使用System.Diagnostics.Process类的Start方法来打开文件,通过传递文件路径作为参数,系统会使用默认应用程序打开该文件,例如,如果文件扩展名为.txt,则会使用NotePad或WordPad打开;如果扩展名为.html,则会使用系统默认浏览器打开
    2025-01-01
  • 浅析C#异步中的Overlapped是如何寻址的

    浅析C#异步中的Overlapped是如何寻址的

    用ReadAsync做文件异步读取时,在Win32层面会传lpOverlapped到内核层,那在内核层回头时,它是如何通过这个lpOverlapped寻找到 ReadAsync这个异步的Task的呢,下面我们就来简单分析一下吧
    2025-01-01

最新评论