一、引用nuget包
- ClickHouse.Ado
- ClickHouse.Net
二、基础封装类
类库封装借鉴了其它博客
public class ClickHouseHelper : IDisposable
{
private readonly string _connectionString = "Compress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Compressor=lz4;Host=192.168.0.233;Port=9000;Database=default;User=default;Password=";
private ClickHouseConnection _clickHouseConnection;
#region Constructor
public ClickHouseHelper()
{
this.CreateConnection();
}
public ClickHouseHelper(string connectionString) : this()
{
this._connectionString = connectionString;
}
#endregion
public ClickHouseConnection CreateConnection()
{
if (_clickHouseConnection == null)
{
var settings = new ClickHouseConnectionSettings(_connectionString);
var cnn = new ClickHouseConnection(settings);
if (cnn.State != ConnectionState.Open)
{
cnn.Open();
}
_clickHouseConnection = cnn;
}
return _clickHouseConnection;
}
public void ExecuteNoQuery(string sql, CommandType commandType, params ClickHouseParameter[] parameters)
{
try
{
if (_clickHouseConnection == null)
{
this.CreateConnection();
}
var command = _clickHouseConnection.CreateCommand();
command.CommandText = sql;
command.CommandType = commandType;
AttachParameters(command.Parameters, parameters);
command.ExecuteNonQuery();
}
catch (Exception e)
{
this.Dispose();
throw;
}
}
public void ExecuteNoQuery(string sql, params ClickHouseParameter[] parameters)
{
try
{
ExecuteNoQuery(sql, CommandType.Text, parameters);
}
catch (Exception e)
{
this.Dispose();
throw;
}
}
public T ExecuteScalar<T>(string sql, CommandType commandType, params ClickHouseParameter[] parameters)
{
T result;
try
{
if (_clickHouseConnection == null)
{
this.CreateConnection();
}
var command = _clickHouseConnection.CreateCommand();
command.CommandText = sql;
command.CommandType = commandType;
AttachParameters(command.Parameters, parameters);
result = (T)command.ExecuteScalar();
}
catch (Exception e)
{
this.Dispose();
throw;
}
return result;
}
public T ExecuteScalar<T>(string sql, params ClickHouseParameter[] parameters)
{
T result;
try
{
result = ExecuteScalar<T>(sql, CommandType.Text, parameters);
}
catch (Exception e)
{
this.Dispose();
throw;
}
return result;
}
public IDataReader ExecuteReader(string sql, CommandType commandType, params ClickHouseParameter[] parameters)
{
IDataReader result = null;
try
{
if (_clickHouseConnection == null)
{
this.CreateConnection();
}
var command = _clickHouseConnection.CreateCommand();
command.CommandText = sql;
command.CommandType = commandType;
AttachParameters(command.Parameters, parameters);
result = command.ExecuteReader();
}
catch (Exception e)
{
this.Dispose();
throw;
}
return result;
}
public IDataReader ExecuteReader(string sql, params ClickHouseParameter[] parameters)
{
</