SoFunction
Updated on 2025-03-04

Guide to the Steps for Connecting ClickHouse Database in C#

1. Install package

First, you need to install the package in your project. You can do this using the NuGet package manager.
Using the NuGet Package Manager Console

Install-Package  -Version 1.4.1

Using the .NET CLI

dotnet add package  --version 1.4.1

2. Configure the ClickHouse client

Next, you need to configure the ClickHouse client to connect to your ClickHouse instance. Here is a basic configuration example.

using ;
using ;
using System;
using ;
 
namespace ClickHouseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Configure ClickHouse connection string            string connectionString = "Host=127.0.0.1;Port=9000;Username=default;Password=;Database=default";
 
            using (var connection = new ClickHouseConnection(connectionString))
            {
                try
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Execute query                    using (var command = new ClickHouseCommand("SELECT * FROM  LIMIT 10", connection))
                    {
                        using (var reader = ())
                        {
                            while (())
                            {
                                (reader[0]);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

3. Create a table

If you haven't created a table yet, you can use . Create a new table.

using ;
using ;
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
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Create table                    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))
                    {
                        ();
                        ("Table created successfully.");
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

4. Insert data

You can use : Insert data into ClickHouse.

using ;
using ;
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
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Insert data                    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))
                    {
                        ();
                        ("Data inserted successfully.");
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

5. Query data

You can use Execute a query to retrieve data.

using ;
using ;
using System;
using ;
 
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
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Query data                    string selectQuery = "SELECT * FROM my_table";
 
                    using (var command = new ClickHouseCommand(selectQuery, connection))
                    {
                        using (var reader = ())
                        {
                            while (())
                            {
                                ($"Id: {reader["id"]}, Name: {reader["name"]}, Description: {reader["description"]}");
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

6. Update data

ClickHouse does not directly support UPDATE operations, but you can use the ALTER TABLE ... UPDATE statement to update data. However, this operation is relatively complex and has low performance, and it is generally recommended to use a combination of INSERT and DELETE to achieve similar effects.

using ;
using ;
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
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Update data                    string updateQuery = @"
                        ALTER TABLE my_table UPDATE name = 'Updated Document' WHERE id = 1;
                    ";
 
                    using (var command = new ClickHouseCommand(updateQuery, connection))
                    {
                        ();
                        ("Data updated successfully.");
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

7. Delete data

You can use Delete data.

using ;
using ;
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
                {
                    ();
                    ("Connected to ClickHouse!");
 
                    // Delete data                    string deleteQuery = @"
                        ALTER TABLE my_table DELETE WHERE id = 2;
                    ";
 
                    using (var command = new ClickHouseCommand(deleteQuery, connection))
                    {
                        ();
                        ("Data deleted successfully.");
                    }
                }
                catch (Exception ex)
                {
                    ($"Error connecting to ClickHouse: {}");
                }
            }
        }
    }
}

Summarize

Through the above steps, you can successfully connect and operate the ClickHouse database in a C# project. Provides rich APIs to perform various operations such as creating tables, inserting data, querying data, updating data, and deleting data. Make sure your ClickHouse instance is running and the client is configured correctly for these operations to go smoothly.

The above is the detailed guide for the steps to connect to the ClickHouse database in C#. For more information about connecting to the ClickHouse database in C#, please follow my other related articles!