C# 连接ClickHouse 数据库

在 C# 中连接 ClickHouse 数据库,您可以使用 ClickHouse.Client 库。这个库提供了对 ClickHouse 数据库的高效访问。以下是详细的步骤指南,帮助您在 C# 项目中连接和操作 ClickHouse 数据库。

  1. 安装 ClickHouse.Client 包

首先,您需要在您的项目中安装 ClickHouse.Client 包。您可以使用 NuGet 包管理器来完成此操作。

使用 NuGet 包管理器控制台

cs 复制代码
Install-Package ClickHouse.Client -Version 1.4.1

使用 .NET CLI

cs 复制代码
dotnet add package ClickHouse.Client --version 1.4.1
  1. 配置 ClickHouse 客户端

接下来,您需要配置 ClickHouse 客户端以连接到您的 ClickHouse 实例。以下是一个基本的配置示例。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;
using System.Data;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配置 ClickHouse 连接字符串
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 执行查询
                    using (var command = new ClickHouseCommand("SELECT * FROM system.numbers LIMIT 10", connection))
                    {
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine(reader[0]);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}
  1. 创建表

如果您还没有创建表,可以使用 ClickHouse.Client 创建一个新的表。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 创建表
                    string createTableQuery = @"
                        CREATE TABLE IF NOT EXISTS my_table
                        (
                            id UInt32,
                            name String,
                            description String
                        ) ENGINE = MergeTree() ORDER BY id;
                    ";

                    using (var command = new ClickHouseCommand(createTableQuery, connection))
                    {
                        command.ExecuteNonQuery();
                        Console.WriteLine("Table created successfully.");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}
  1. 插入数据

您可以使用 ClickHouse.Client 将数据插入到 ClickHouse 中。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 插入数据
                    string insertQuery = @"
                        INSERT INTO my_table (id, name, description) VALUES
                        (1, 'Sample Document', 'This is a sample document.'),
                        (2, 'Another Document', 'This is another sample document.');
                    ";

                    using (var command = new ClickHouseCommand(insertQuery, connection))
                    {
                        command.ExecuteNonQuery();
                        Console.WriteLine("Data inserted successfully.");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}
  1. 查询数据

您可以使用 ClickHouse.Client 执行查询以检索数据。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;
using System.Data;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 查询数据
                    string selectQuery = "SELECT * FROM my_table";

                    using (var command = new ClickHouseCommand(selectQuery, connection))
                    {
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine($"Id: {reader["id"]}, Name: {reader["name"]}, Description: {reader["description"]}");
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}
  1. 更新数据

ClickHouse 不直接支持 UPDATE 操作,但您可以使用 ALTER TABLE ... UPDATE 语句来更新数据。不过,这种操作相对复杂且性能较低,通常建议使用 INSERT 和 DELETE 组合来实现类似的效果。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 更新数据
                    string updateQuery = @"
                        ALTER TABLE my_table UPDATE name = 'Updated Document' WHERE id = 1;
                    ";

                    using (var command = new ClickHouseCommand(updateQuery, connection))
                    {
                        command.ExecuteNonQuery();
                        Console.WriteLine("Data updated successfully.");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}
  1. 删除数据

您可以使用 ClickHouse.Client 删除数据。

cs 复制代码
using ClickHouse.Client;
using ClickHouse.Client.ADO;
using System;

namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";

            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Connected to ClickHouse!");

                    // 删除数据
                    string deleteQuery = @"
                        ALTER TABLE my_table DELETE WHERE id = 2;
                    ";

                    using (var command = new ClickHouseCommand(deleteQuery, connection))
                    {
                        command.ExecuteNonQuery();
                        Console.WriteLine("Data deleted successfully.");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error connecting to ClickHouse: {ex.Message}");
                }
            }
        }
    }
}

总结

通过以上步骤,您可以在 C# 项目中成功连接和操作 ClickHouse 数据库。ClickHouse.Client 提供了丰富的 API 来执行各种操作,如创建表、插入数据、查询数据、更新数据和删除数据。确保您的 ClickHouse 实例正在运行,并且客户端配置正确,以便顺利进行这些操作。如果遇到任何问题,可以参考 ClickHouse.Client 的官方文档或社区资源以获取更多帮助。

参考资料:

• ClickHouse 官方文档 https://clickhouse.com/docs/zh/getting-started/install

• ClickHouse.Client https://github.com/yandex/ClickHouse.Client

相关推荐
墨子夕2 小时前
创新的潮汐——从科学发现到资本周期的百年规律(第二卷)
大数据·数据库·人工智能
Y3815326622 小时前
印度电商数据采集教程:用 SerpBase 查 Flipkart/Myntra/Ajio 商品(附代码)
数据库·python
企业数字化笔记2 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
roman_日积跬步-终至千里2 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析
盟接之桥3 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
Nturmoils3 小时前
数据集成软件 KFS:多套业务库汇聚时,先把来源和口径理清
数据库
用户788477316343 小时前
用 C# 把每周 6 小时的 PDF 录入干到 20 分钟:一份可复制的桌面 OCR 方案
c#
麦壳饼3 小时前
SonnetDB:批量写入的大小、背压与刷新策略
数据库·sonnetdb
weixin_460443564 小时前
Java+Linux私有化训考平台:服务、数据库与终端部署结构解析
java·linux·数据库·私有化部署·企业培训考试系统·企业考试系统
编程火箭车4 小时前
MySQL 拥抱 AI:向量、RAG、AutoML 全进了数据库
数据库·mysql·ai编程·向量数据库·rag·automl·mysql9