TDengine C# Connector
TDengine.Connector
是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。
.NET 版本兼容性
- .NET Framework 4.6 及以上版本。
- .NET 5.0 及以上版本。
支持的平台
- 原生连接支持的平台和 TDengine 客户端驱动支持的平台一致。
- WebSocket 连接支持所有能运行 .NET 运行时的平台。
版本历史
Connector 版本 | 主要变化 | TDengine 版本 |
---|---|---|
3.1.5 | 修复 websocket 协议编码中文时长度错误 | - |
3.1.4 | 提升 websocket 查询和写入性能 | 3.3.2.0 及更高版本 |
3.1.3 | 支持 WebSocket 自动重连 | - |
3.1.2 | 修复 schemaless 资源释放 | - |
3.1.1 | 支持 varbinary 和 geometry 类型 | - |
3.1.0 | WebSocket 使用原生实现 | 3.2.1.0 及更高版本 |
处理异常
TDengine.Connector
会抛出异常,应用程序需要处理异常。taosc 异常类型 TDengineError
,包含错误码和错误信息,应用程序可以根据错误码和错误信息进行处理。
TDengine 其他功能模块的报错,请参考 错误码
数据类型映射
TDengine DataType | C# Type |
---|---|
TIMESTAMP | DateTime |
TINYINT | sbyte |
SMALLINT | short |
INT | int |
BIGINT | long |
TINYINT UNSIGNED | byte |
SMALLINT UNSIGNED | ushort |
INT UNSIGNED | uint |
BIGINT UNSIGNED | ulong |
FLOAT | float |
DOUBLE | double |
BOOL | bool |
BINARY | byte[] |
NCHAR | string (utf-8编码) |
JSON | byte[] |
VARBINARY | byte[] |
GEOMETRY | byte[] |
注意:JSON 类型仅在 tag 中支持。 GEOMETRY类型是 little endian 字节序的二进制数据,符合 WKB 规范。详细信息请参考 数据类型 WKB规范请参考Well-Known Binary (WKB)
示例程序汇总
示例程序源码请参考:示例程序
API 参考
ADO.NET 驱动
TDengine.Data.Client
接口实现了 ADO.NET 驱动,支持连接 TDengine 数据库,进行数据操作。
参数规范
ConnectionStringBuilder 使用 key-value 对方式设置连接参数,key 为参数名,value 为参数值,不同参数之间使用分号 ;
分割。
例如:
"protocol=WebSocket;host=127.0.0.1;port=6041;useSSL=false"
原生连接
例如:"host=127.0.0.1;port=6030;username=root;password=taosdata;protocol=Native;db=test"
支持的参数如下:
host
:TDengine 运行实例的地址。port
:TDengine 运行实例的端口。username
:连接的用户名。password
:连接的密码。protocol
:连接的协议,可选值为 Native 或 WebSocket,默认为 Native。db
:连接的数据库。timezone
:时区,默认为本地时区。
WebSocket 连接
例如:"protocol=WebSocket;host=127.0.0.1;port=6041;useSSL=false;enableCompression=true;autoReconnect=true;reconnectIntervalMs=10;reconnectRetryCount=5"
支持的参数如下:
host
:TDengine 运行实例的地址。port
:TDengine 运行实例的端口。username
:连接的用户名。password
:连接的密码。protocol
:连接的协议,可选值为 Native 或 WebSocket,默认为 Native。db
:连接的数据库。timezone
:时区,默认为本地时区。connTimeout
:连接超时时间,默认为 1 分钟。readTimeout
:读取超时时间,默认为 5 分钟。writeTimeout
:发送超时时间,默认为 10 秒。token
:连接 TDengine cloud 的 token。useSSL
:是否使用 SSL 连接,默认为 false。enableCompression
:是否启用 WebSocket 压缩,默认为 false。autoReconnect
:是否自动重连,默认为 false。reconnectRetryCount
:重连次数,默认为 3。reconnectIntervalMs
:重连间隔毫秒时间,默认为 2000。
接口说明
ConnectionStringBuilder
类提供了连接配置字符串的解析功能。
public ConnectionStringBuilder(string connectionString)
- 接口说明:ConnectionStringBuilder 构造函数。
- 参数说明:
connectionString
:连接配置字符串。
连接功能
C# 驱动支持创建 ADO.NET 连接,返回支持 ADO.NET 标准的 DbConnection
接口的对象,还提供了 ITDengineClient
接口,扩充了一些无模式写入接口。
标准接口
ADO.NET 连接支持的标准接口如下:
-
public TDengineConnection(string connectionString)
- 接口说明:TDengineConnection 构造函数。
- 参数说明:
connectionString
:连接配置字符串。
- 异常:格式错误抛出
ArgumentException
异常。
-
public void ChangeDatabase(string databaseName)
- 接口说明:切换数据库。
- 参数说明:
databaseName
:数据库名。
- 异常:执行失败抛出
TDengineError
异常。
-
public void Close()
- 接口说明:关闭连接。
-
public void Open()
- 接口说明:打开连接。
- 异常:打开失败抛出
TDengineError
异常,WebSocket 连接可能存在网络异常须注意处理。
-
public string ServerVersion
- 接口说明:返回服务器版本。
- 返回值:服务器版本字符串。
- 异常:执行失败抛出
TDengineError
异常。
-
public string DataSource
- 接口说明:返回数据源。
- 返回值:创建连接 host 配置。
-
public string Database
- 接口说明:返回连接数据库。
- 返回值:创建连接 db 配置。
-
public TDengineCommand(TDengineConnection connection)
- 接口说明:TDengineCommand 构造函数。
- 参数说明:
connection
:TDengineConnection 对象。
- 异常:执行失败抛出
TDengineError
异常。
-
public void Prepare()
- 接口说明:检查连接和命令文本,并准备命令执行。
- 异常:未执行 open 或未设置 CommandText 抛出
InvalidOperationException
异常。
-
public string CommandText
- 接口说明:获取或设置命令文本。
- 返回值:命令文本。
-
public new virtual TDengineParameterCollection Parameters
- 接口说明:获取参数集合。
- 返回值:TDengineParameterCollection 对象。
无模式写入
-
public static ITDengineClient Open(ConnectionStringBuilder builder)
- 接口说明:打开连接。
- 参数说明:
builder
:连接配置。
- 返回值:ITDengineClient 接口。
- 异常:打开失败抛出
TDengineError
异常,WebSocket 连接可能存在网络异常须注意处理。
-
void SchemalessInsert(string[] lines, TDengineSchemalessProtocol protocol,TDengineSchemalessPrecision precision, int ttl, long reqId)
- 接口说明:无模式写入。
- 参数说明:
lines
:数据行数组。protocol
:数据协议,支持协议:TSDB_SML_LINE_PROTOCOL = 1
TSDB_SML_TELNET_PROTOCOL = 2
TSDB_SML_JSON_PROTOCOL = 3
。precision
:时间精度,支持配置:TSDB_SML_TIMESTAMP_NOT_CONFIGURED = 0
TSDB_SML_TIMESTAMP_HOURS = 1
TSDB_SML_TIMESTAMP_MINUTES = 2
TSDB_SML_TIMESTAMP_SECONDS = 3
TSDB_SML_TIMESTAMP_MILLI_SECONDS = 4
TSDB_SML_TIMESTAMP_MICRO_SECONDS = 5
TSDB_SML_TIMESTAMP_NANO_SECONDS = 6
。ttl
:数据过期时间,0表示不配置。reqId
:请求 ID。
- 异常:执行失败抛出
TDengineError
异常。
执行 SQL
C# 驱动提供了符合 ADO.NET 标准的 DbCommand
接口,支持以下功能:
- 执行 SQL 语句:执行静态 SQL 语句,并返回其生成的结果对象。
- 查询执行:可以执行返回数据集的查询(
SELECT
语句)。 - 更新执行:可以执行影响行数的 SQL 语句,如
INSERT
、UPDATE
、DELETE
等。 - 获取结果:可以获取查询执行后返回的结果集(
ResultSet
对象),并遍历查询返回的数据。 - 获取更新计数:对于非查询 SQL 语句,可以获取执行后影响的行数。
- 关闭资源:提供了关闭的方法,以释放数据库资源。
另外 C# 驱动还提供了用于请求链路跟踪的扩展接口。
标准接口
-
public int ExecuteNonQuery()
- 接口说明:执行 SQL 语句,返回受影响的行数。
- 返回值:受影响的行数。
- 异常:执行失败抛出
TDengineError
异常。
-
public object ExecuteScalar()
- 接口说明:执行查询,并返回查询结果的第一行第一列。
- 返回值:查询结果的第一行第一列。
- 异常:执行失败抛出
TDengineError
异常。
-
public DbDataReader ExecuteReader()
- 接口说明:执行查询,并返回查询结果的数据读取器。
- 返回值:查询结果的数据读取器。
- 异常:执行失败抛出
TDengineError
异常。
-
public void Dispose();
- 接口说明:释放资源。
扩展接口
扩展接口主要用于请求链路跟踪。
-
IRows Query(string query, long reqId)
- 接口说明:执行查询,返回查询结果。
- 参数说明:
query
:查询语句。reqId
:请求 ID。
- 返回值:查询结果。
- 异常:执行失败抛出
TDengineError
异常。
-
long Exec(string query, long reqId)
- 接口说明:执行 SQL 语句。
- 参数说明:
query
:SQL 语句。reqId
:请求 ID。
- 返回值:受影响的行数。
- 异常:执行失败抛出
TDengineError
异常。
结果获取
C# 驱动提供了符合 ADO.NET 标准的 DbDataReader
接口,提供了用于读取结果集中元数据和数据的方法。
结果集
DbDataReader
接口提供了以下方法获取结果集:
-
public bool GetBoolean(int ordinal)
- 接口说明:获取指定列的布尔值。
- 参数说明:
ordinal
:列索引。
- 返回值:布尔值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public byte GetByte(int ordinal)
- 接口说明:获取指定列的字节值。
- 参数说明:
ordinal
:列索引。
- 返回值:字节值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public long GetBytes(int ordinal, long dataOffset, byte[] buffer, int bufferOffset, int length)
- 接口说明:获取指定列的字节值。
- 参数说明:
ordinal
:列索引。dataOffset
:数据偏移量。buffer
:缓冲区。bufferOffset
:缓冲区偏移量。length
:长度。
- 返回值:字节值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public char GetChar(int ordinal)
- 接口说明:获取指定列的字符值。
- 参数说明:
ordinal
:列索引。
- 返回值:字符值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public long GetChars(int ordinal, long dataOffset, char[] buffer, int bufferOffset, int length)
- 接口说明:获取指定列的字符值。
- 参数说明:
ordinal
:列索引。dataOffset
:数据偏移量。buffer
:缓冲区。bufferOffset
:缓冲区偏移量。length
:长度。
- 返回值:字符值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public DateTime GetDateTime(int ordinal)
- 接口说明:获取指定列的日期时间值。
- 参数说明:
ordinal
:列索引。
- 返回值:日期时间值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public double GetDouble(int ordinal)
- 接口说明:获取指定列的双精度浮点数值。
- 参数说明:
ordinal
:列索引。
- 返回值:双精度浮点数值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public float GetFloat(int ordinal)
- 接口说明:获取指定列的单精度浮点数值。
- 参数说明:
ordinal
:列索引。
- 返回值:单精度浮点数值。
- 异常:类型不对应抛出
InvalidCastException
异 常。
-
public short GetInt16(int ordinal)
- 接口说明:获取指定列的 16 位整数值。
- 参数说明:
ordinal
:列索引。
- 返回值:16 位整数值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public int GetInt32(int ordinal)
- 接口说明:获取指定列的 32 位整数值。
- 参数说明:
ordinal
:列索引。
- 返回值:32 位整数值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public long GetInt64(int ordinal)
- 接口说明:获取指定列的 64 位整数值。
- 参数说明:
ordinal
:列索引。
- 返回值:64 位整数值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public string GetString(int ordinal)
- 接口说明:获取指定列的字符串值。
- 参数说明:
ordinal
:列索引。
- 返回值:字符串值。
- 异常:类型不对应抛出
InvalidCastException
异常。
-
public object GetValue(int ordinal)
- 接口说明:获取指定列的值。
- 参数说明:
ordinal
:列索引。
- 返回值: 结果对象。
-
public int GetValues(object[] values)
- 接口说明:获取所有列的值。
- 参数说明:
values
:值数组。
- 返回值:值数量。
-
public bool IsDBNull(int ordinal)
- 接口说明:判断指定列是否为 NULL。
- 参数说明:
ordinal
:列索引。
- 返回值:是否为 NULL。
-
public int RecordsAffected
- 接口说明:获取受影响的行数。
- 返回值:受影响的行数。
-
public bool HasRows
- 接口说明:结果是否有行数据。
- 返回值:结果是否有行数据。
-
public bool Read()
- 接口说明:读取下一行。
- 返回值:是否读取成功。
-
public IEnumerator GetEnumerator()
- 接口说明:获取枚举器。
- 返回值:枚举器。
-
public void Close()
- 接口说明:关闭结果集。
结果集元数据
DbDataReader
接口提供了以下方法获取结果集元数据:
-
public DataTable GetSchemaTable()
- 接口说明:获取结果集元数据。
- 返回值:结果集元数据。
-
public string GetDataTypeName(int ordinal)
- 接口说明:获取指定列的数据类型名称。
- 参数说明:
ordinal
:列索引。
- 返回值:数据类型名称。
-
public Type GetFieldType(int ordinal)
- 接口说明:获取指定列的数据类型。
- 参数说明:
ordinal
:列索引。
- 返回值:数据类型。
-
public string GetName(int ordinal)
- 接口说明:获取指定列的名称。
- 参数说明:
ordinal
:列索引。
- 返回值:列名称。
-
public int GetFieldSize(int ordinal)
- 接口说明:获取指定列的大小。
- 参数说明:
ordinal
:列索引。
- 返回值:列大小。
-
public int GetOrdinal(string name)
- 接口说明:获取指定列的索引。
- 参数说明:
name
:列名称。
- 返回值:列索引。
-
public int FieldCount
- 接口说明:获取列数。
- 返回值:列数。
参数绑定
TDengineCommand
类支持参数绑定。