TDengine 语言连接器(C#)
简介
TDengine.Connector
是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。
.NET 版本兼容性
- .NET Framework 4.6 及以上版本。
- .NET 5.0 及以上版本。
支持的平台
- 原生连接支持的平台和 TDengine 客户端驱动支持的平台一致。
- WebSocket 连接支持所有能运行 .NET 运行时的平台。
版本历史
Connector 版本 | 主要变化 | TDengine 版本 |
---|---|---|
3.1.6 | 优化 WebSocket 连接接收消息处理。 | - |
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 |
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
类支持参数绑定。
标准接口
TDengineCommand
类继承了 DbCommand
接口,支持以下功能:
-
public string CommandText
- 接口说明:获取或设置命令文本,支持参数绑定。
- 返回值:命令文本。
-
public new virtual TDengineParameterCollection Parameters
- 接口说明:获取参数集合。
- 返回值:
TDengineParameterCollection
对象。
参数元数据
TDengineParameterCollection
继承了 DbParameterCollection
接口,支持以下功能:
-
public int Add(object value)
- 接口说明:添加参数。
- 参数说明:
value
:参数值。
- 返回值:参数索引。
-
public void Clear()
- 接口说明:清空参数。
-
public bool Contains(object value)
- 接口说明:是否包含参数。
- 参数说明:
value
:参数值。
- 返回值:是否包含参数。
-
public int IndexOf(object value)
- 接口说明:获取参数索引。
- 参数说明:
value
:参数值。
- 返回值:参数索引。
-
public void Insert(int index, object value)
- 接口说明:插入参数。
- 参数说明:
index
:索引。value
:参数值。
-
public void Remove(object value)
- 接口说明:移除参数。
- 参数说明:
value
:参数值。
-
public void RemoveAt(int index)
- 接口说明:移除参数。
- 参数说明:
index
:索引。
-
public void RemoveAt(string parameterName)
- 接口说明:移除参数。
- 参数说明:
parameterName
:参数名。
-
public int Count
- 接口说明:获取参数数量。
- 返回值:参数数量。
-
public int IndexOf(string parameterName)
- 接口说明:获取参数索引。
- 参数说明:
parameterName
:参数名。
- 返回值:参数索引。
-
public bool Contains(string value)
- 接口说明:是否包含参数。
- 参数说明:
value
:参数名。
- 返回值:是否包含参数。
-
public void CopyTo(Array array, int index)
- 接口说明:复制参数。
- 参数说明:
array
:目标数组。index
:索引。
-
public IEnumerator GetEnumerator()
- 接口说明:获取枚举器。
- 返回值:枚举器。
-
public void AddRange(Array values)
- 接口说明:添加参数。
- 参数说明:
values
:参数数组。
TDengineParameter
继承了 DbParameter
接口,支持以下功能:
-
public TDengineParameter(string name, object value)
- 接口说明:TDengineParameter 构造函数。
- 参数说明:
name
:参数名,需要以 @ 开头,如 @0、@1、@2 等。value
:参数值,需要 C# 列类型与 TDengine 列类型一一对应。
-
public string ParameterName
- 接口说明:获取或设置参数名。
- 返回值:参数名。
-
public object Value
- 接口说明:获取或设置参数值。
- 返回值:参数值。
扩展接口
ITDengineClient
接口提供了扩展的参数绑定接口。
IStmt StmtInit(long reqId)
- 接口说明:初始化 statement 对象。
- 参数说明:
reqId
:请求 ID。
- 返回值:实现 IStmt 接口的对象。
- 异常:执行失败抛出
TDengineError
异常。
IStmt
接口提供了扩展的参数绑定接口。
-
void Prepare(string query)
- 接口说明:准备 statement。
- 参数说明:
query
:查询语句。
- 异常:执行失败抛出
TDengineError
异常。
-
bool IsInsert()
- 接口说明:判断是否为插入语句。
- 返回值:是否为插入语句。
- 异常:执行失败抛出
TDengineError
异常。
-
void SetTableName(string tableName)
- 接口说明:设置表名。
- 参数说明:
tableName
:表名。
- 异常:执行失败抛出
TDengineError
异常。
-
void SetTags(object[] tags)
- 接口说明:设置标签。
- 参数说明:
tags
:标签数组。
- 异常:执行失败抛出
TDengineError
异常。
-
TaosFieldE[] GetTagFields()
- 接口说明:获取标签属性。
- 返回值:标签属性数组。
- 异常:执行失败抛出
TDengineError
异常。
-
TaosFieldE[] GetColFields()
- 接口说明:获取列属性。
- 返回值:列属性数组。
- 异常:执行失败抛出
TDengineError
异常。
-
void BindRow(object[] row)
- 接口说明:绑定行。
- 参数说明:
row
:行数据数组。
- 异常:执行失败抛出
TDengineError
异常。
-
void BindColumn( TaosFieldE[] fields,params Array[] arrays)
- 接口说明:绑定全部列。
- 参数说明:
fields
:字段属性数组。arrays
:多列数据数组。
- 异常:执行失败抛出
TDengineError
异常。
-
void AddBatch()
- 接口说明:添加批处理。
- 异常:执行失败抛出
TDengineError
异常。
-
void Exec()
- 接口说明:执行参数绑定。
- 异常:执行失败抛出
TDengineError
异常。
-
long Affected()
- 接口说明:获取受影响的行数。
- 返回值:受影响的行数。
- 异常:执行失败抛出
TDengineError
异常。
-
IRows Result()
- 接口说明:获取结果。
- 返回值:结果对象。
- 异常:执行失败抛出
TDengineError
异常。
数据订阅
ConsumerBuilder
类提供了消费者构建相关接口,ConsumeResult
类提供了消费结果相关接口,TopicPartitionOffset
类提供了分区偏移量相关接口。ReferenceDeserializer
和 DictionaryDeserializer
提供了反序列化的支持。
消费者
public ConsumerBuilder(IEnumerable<KeyValuePair<string, string>> config)
- 接口说明:ConsumerBuilder 构造函数。
- 参数说明:
config
:消费配置。
创建消费者支持属性列表:
useSSL
:是否使用 SSL 连接,默认为 false。token
:连接 TDengine cloud 的 token。ws.message.enableCompression
:是否启用 WebSocket 压缩,默认为 false。ws.autoReconnect
:是否自动重连,默认为 false。ws.reconnect.retry.count
:重连次数,默认为 3。ws.reconnect.interval.ms
:重连间隔毫秒时间,默认为 2000。
其他参数请参考:Consumer 参数列表,注意 TDengine 服务端自 3.2.0.0 版本开始消息订阅中的 auto.offset.reset 默认值发生变化。
public IConsumer<TValue> Build()
- 接口说明:构建消费者。
- 返回值:消费者对象。
IConsumer
接口提供了消费者相关 API:
-
ConsumeResult<TValue> Consume(int millisecondsTimeout)
- 接口说明:消费消息。
- 参数说明:
millisecondsTimeout
:毫秒超时时间。
- 返回值:消费结果。
- 异常:执行失败抛出
TDengineError
异常。
-
List<TopicPartition> Assignment { get; }
- 接口说明:获取分配信息。
- 返回值:分配信息。
- 异常:执行失败抛出
TDengineError
异常。
-
List<string> Subscription()
- 接口说明:获取订阅的主题。
- 返回值:主题列表。
- 异常:执行失败抛出
TDengineError
异常。
-
void Subscribe(IEnumerable<string> topic)
- 接口说明:订阅主题列表。
- 参数说明:
topic
:主题列表。
- 异常:执行失败抛出
TDengineError
异常。
-
void Subscribe(string topic)
- 接口说明:订阅单个主题。
- 参数说明:
topic
:主题。
- 异常:执行失败抛出
TDengineError
异常。
-
void Unsubscribe()
- 接口说明:取消订阅。
- 异常:执行失败抛出
TDengineError
异常。
-
void Commit(ConsumeResult<TValue> consumerResult)
- 接口说明:提交消费结果。
- 参数说明:
consumerResult
:消费结果。
- 异常:执行失败抛出
TDengineError
异常。
-
List<TopicPartitionOffset> Commit()
- 接口说明:提交全部消费结果。
- 返回值:分区偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
void Commit(IEnumerable<TopicPartitionOffset> offsets)
- 接口说明:提交消费结果。
- 参数说明:
offsets
:分区偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
void Seek(TopicPartitionOffset tpo)
- 接口说明:跳转到分区偏移量。
- 参数说明:
tpo
:分区偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
List<TopicPartitionOffset> Committed(TimeSpan timeout)
- 接口说明:获取分区偏移量。
- 参数说明:
timeout
:超时时间 (未使用)。
- 返回值:分区偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
List<TopicPartitionOffset> Committed(IEnumerable<TopicPartition> partitions, TimeSpan timeout)
- 接口说明:获取指定分区偏移量。
- 参数说明:
partitions
:分区列表。timeout
:超时时间 (未使用)。
- 返回值:分区偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
Offset Position(TopicPartition partition)
- 接口说明:获取消费位置。
- 参数说明:
partition
:分区。
- 返回值:偏移量。
- 异常:执行失败抛出
TDengineError
异常。
-
void Close()
- 接口说明:关闭消费者。
消费记录
ConsumeResult
类提供了消费结果相关接口:
public List<TmqMessage<TValue>> Message
- 接口说明:获取消息列表。
- 返回值:消息列表。
TmqMessage
类提供了消息具体内容:
public class TmqMessage<TValue>{public string TableName { get; set; }public TValue Value { get; set; }}
TableName
:表名Value
:消息内容
分区信息
从 ConsumeResult
获取 TopicPartitionOffset
:
public TopicPartitionOffset TopicPartitionOffset
TopicPartitionOffset
类提供了获取分区信息的接口:
-
public string Topic { get; }
- 接口说明:获取主题。
- 返回值:主题。
-
public Partition Partition { get; }
- 接口说明:获取分区。
- 返回值:分区。
-
public Offset Offset { get; }
- 接口说明:获取偏移量。
- 返回值:偏移量。
-
public TopicPartition TopicPartition
- 接口说明:获取主题分区。
- 返回值:主题分区。
-
public string ToString()
- 接口说明:转换为字符串。
- 返回值:字符串信息。
偏移量元数据
Offset
类提供了偏移量相关接口:
public long Value
- 接口说明:获取偏移量值。
- 返回值:偏移量值。
反序列化
C# 驱动提供了两个反序列化类:ReferenceDeserializer
和 DictionaryDeserializer
。它们都实现了 IDeserializer
接口。
ReferenceDeserializer 用来将消费到的一条记录反序列化为一个对象,需要保证对象类的属性名与消费到的数据的列名能够对应,且类型能够匹配。
DictionaryDeserializer 则会将消费到的一行数据反序列化为一个 Dictionary<string, object>
对象,其 key 为列名,值为对象。
ReferenceDeserializer 和 DictionaryDeserializer 的接口不会被用户直接调用,请参考使用样例。
附录
更多示例程序。
访问官网
更多内容欢迎访问 TDengine 官网
相关文章:
TDengine 语言连接器(C#)
简介 TDengine.Connector 是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。 .NET 版本兼容性 .NET Framework 4.6 及以上版本。.NET 5.0 及以上版本。 支持的平台 原生连接支持的平台和 TDengine 客户端驱动支持的平台…...
AI对百度搜索与抖音社区的影响差异?
在AIGC(生成式人工智能)快速发展的背景下,用户获取内容的方式确实变得更加直接和便捷。抖音、小红书等视频内容社区的流量下降速度可能比百度搜索更慢,这一现象可以从以下几个角度分析: 1. 内容形式的差异:…...
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…...
是德科技KEYSIGHT Agilent U2004A功率传感器
是德科技KEYSIGHT Agilent U2004A功率传感器 Keysight U2004A USB功率传感器的特性和规格包括: 频率范围为 9 kHz 至 6 GHz -60 至 20 dBm 的宽动态范围 内部调零功能消除了外部校准 测量速度高达 250 个读数/秒 在 PC 或其他 Agilent 仪器上显示功率测量值 频率…...
Kubernetes(K8S)内部功能总结
Kubernetes(K8S)是云技术的最核心的部分,也是构建是云原生的基石 K8S K8S,是Kubernetes的缩写,是Google开发的容器编排平台,现在由云原生计算基金会(CNCF)进行维护。 K8Sÿ…...
智谱最新模型GLM4是如何练成的
写在前面 这篇博客将基于《ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools》,深入剖析 GLM-4 系列在**模型架构设计、预训练、后训练(对齐)、以及关键技术创新(如长上下文处理、Agent 能力构建)**等环节的实现逻辑与设计考量,带你全面了…...
类头文件相互包含的问题
1.预编译指令: #ifndef CLASS_A_ #define CLASS_A_#include CLASS_B.h#endif 2.#pragma once 3.将类A中声明类B,并类中声明类B的指针,在类中的实现文件中包含类B的头文件。在类B中包含类A的头文件 a.h:class Bclass A {public:private:B*…...
云原生周刊:K8s 中的 GPU 共享
开源项目推荐 A2A Google 的 Agent2Agent(A2A)协议是一个开源标准,旨在促进不同框架和供应商构建的 AI 代理之间的互操作性。它允许代理通过统一的协议安全地交换信息、协同执行任务,并在多种企业平台和云环境中无缝协作。 A2A…...
(五)机器学习---决策树和随机森林
在分类问题中还有一个常用算法:就是决策树。本文将会对决策树和随机森林进行介绍。 目录 一.决策树的基本原理 (1)决策树 (2)决策树的构建过程 (3)决策树特征选择 (4࿰…...
DeepReaserch写的文献综述示例分享
目录 DeepReaserch提供的文献综述: 人工智能在医疗影像诊断中的研究进展综述(2015–2025) 引言 1 近十年研究进展回顾 1.1 深度学习崛起阶段(2015–2017年) 1.2 方法完善与临床初探(2018–2020年&…...
Token安全存储的几种方式
文章目录 1. EncryptedSharedPreferences示例代码 2. SQLCipher示例代码 3.使用 Android Keystore加密后存储示例代码1. 生成密钥对2. 使用 KeystoreManager 代码说明安全性建议加密后的几种存储方式1. 加密后采用 SharedPreferences存储2. 加密后采用SQLite数据库存储1. Token…...
阶段性使用总结-通义灵码
序言 前段时间用通义灵码,参加了下数字中国闽江流域的比赛。https://www.dcic-china.com/competitions/10173 最后成绩一般般,106名,大概有2000多人参加这题目,估计有一堆小号。 按照下面这个思路建模的,迭代了大概15…...
SpringBoot 与 Vue3 实现前后端互联全解析
在当前的互联网时代,前后端分离架构已经成为构建高效、可维护且易于扩展应用系统的主流方式。本文将详细介绍如何利用 SpringBoot 与 Vue3 构建一个前后端分离的项目,展示两者如何通过 RESTful API 实现无缝通信,让读者了解从环境搭建、代码实…...
Flutter 图标和按钮组件
引言 在 Flutter 应用开发中,图标和按钮是构建用户界面不可或缺的元素。图标能够以直观的图形方式传达信息,增强应用的视觉吸引力;而按钮则是用户与应用进行交互的重要途径。本文将详细介绍 Flutter 中图标和按钮组件的使用,涵盖…...
大模型平台Dify工作流高效调用Ragflow知识库,解决其原生知识库解析和检索能力不足的问题
Dify调用Ragflow知识库的详细步骤,安装详细部署在我之前文章 多图超详细:Docker安装知识库AI客服RAGFlow的详细步骤、使用教程及注意事项:。超详细:Dify大语言模型工作流开发平台的安装与使用,deepseek知识库客服等。…...
数据库的基本原则
数据库的核心原则 原子性与持久性:原子性(Atomicity)确保一个事务中的所有操作要么全部完成,要么完全不执行,不会出现部分完成的情况。持久性(Durability)则保证一旦事务提交成功,即…...
项目集管理汇报报告 (范本)
该文档适用于企业管理层、项目经理、项目团队成员以及对项目集管理感兴趣的人员。它对企业项目管理至关重要,通过全面分析 揭示了如目标达成率低、数据缺失严重、成本进度管控有风险等关键问题,为管理层提供决策依据,助力其了解项目整体状况&…...
阿里云 MSE Nacos 发布全新“安全防护”模块,简化安全配置,提升数据保护
作者:张文浩 阿里云在其微服务引擎(MSE)注册配置中心 Nacos 上正式推出全新“安全防护”功能模块,旨在帮助企业用户有效管理安全状态和降低开启安全相关功能的学习成本,提升微服务架构的安全性。首期推出的“安全防护…...
Pydantic v2 的使用
一、前言 Pydantic 是一个 Python 数据验证 和 设置管理 库,使用 Python 类型 注解。具有以下特点: 1.1 核心功能 数据验证:自动验证数据类型和约束条件类型转换:自动将输入数据转换为声明类型Schema 生成:自动生成…...
从零开始学A2A二 : A2A 协议的技术架构与实现
A2A 协议的技术架构与实现 学习目标 技术架构掌握 深入理解 A2A 协议的分层架构设计掌握各层次的功能和职责理解协议的工作原理和数据流 实现能力培养 能够搭建基本的 A2A 服务端掌握客户端开发方法实现智能体间的有效通信 架构设计理解 理解与 MCP 的本质区别掌握多智能体协…...
设计模式每日硬核训练 Day 12:装饰器模式(Decorator Pattern)完整讲解与实战应用
🔄 回顾 Day 11:适配器模式小结 在 Day 11 中,我们学习了适配器模式(Adapter Pattern): 用于将“不兼容”的接口适配为目标接口,解决新旧系统之间的桥接问题。强调“接口兼容、外部桥接”&…...
[CMake] CMakePresets.json简单使用
解决的问题 CMakePresets.json是为了解决在使用命令行编译使用CMake的项目时,可能会十分麻烦。如类似的参数-DCMAKE_BUILD_TYPEDebug所以有了CMakePresets.json来配置configure和build时的命令,然后在使用时 cmake --preset<configure-preset-name&…...
智能办公如何创建e10流程
智能办公如何创建e10流程 配置e10流程前,您要做的事情: 1、进入e10管理后台,创建应用,开放接口权限;2、进入e10管理后台,配置千里聆套件,配置同步人员;3、进入千里聆系统ÿ…...
Mac关闭sip方法
Mac关闭sip方法 导航 文章目录 Mac关闭sip方法导航完整操作流程图详细步骤 完整操作流程图 这东西是我在网上搬运下来的,但是我在为业务实操过程中,根据实操情况还是有新的注意点的 详细步骤 1.在「关于本机」-「系统报告」-「软件」;查看SIP是否开启…...
Flutter 播放利器:`media_kit` 的详细介绍与使用指南
在 Flutter 项目中实现音视频播放,开发者过去主要依赖如 video_player、just_audio 等第三方库,但这些库或多或少存在一些局限性,比如平台兼容性差、定制能力不足、播放格式有限等问题。 而 media_kit 是近年崛起的一款全平台音视频播放解决…...
GEO优化中的关键底座:知识图谱如何提升生成式AI的准确性与实时性?
今天,我将与大家分享如何通过GEO优化(生成式人工智能优化)和动态知识图谱,帮助企业提升智能化水平并实现高效的业务运营。首先,GEO优化利用生成式AI为企业提供内容生成、客服自动化和智能销售等服务,而知识…...
案例 - 登录认证:保障系统安全访问的实现
摘要:本文介绍了为Tlias智能学习辅助系统添加登录认证功能的过程,涵盖从需求分析、接口文档设计,到思路分析、功能开发以及最后的测试等多个关键环节,旨在实现只有通过登录认证的用户才能安全访问后台系统功能的目标。 关键词&am…...
Node.js Session 原理简单介绍 + 示例代码
目录 ✅ Session 原理简要说明 🧩 示例项目 - 使用 Node.js Express 实现简单 Session 登录 📁 文件结构 🔹 server.js (JavaScript) 🔸 index.html (HTML) ▶️ 程序运行步骤 ✅ 程序运行效果 🎯 总结 在 We…...
C# 类型、存储和变量(C#程序是一组类型声明)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 C#程序是一组类型声明 如果广泛地描述C和C程序源代码的特征,可以说C程序是一组函数和数据…...
复变函数摘记3
复变函数摘记3 5. 留数5.1 可去奇点、极点、本性奇点5.2 零点与极点的关系5.3 在无穷远点处的情形5.4 留数 5. 留数 \quad 如果函数 f ( z ) f(z) f(z) 在 z 0 z_0 z0 及 z 0 z_0 z0 的邻域内处处可导,那么称 f ( z ) f(z) f(z) 在点 z 0 z_0 z0 处解析。…...
深入定制 QSlider——实现精准点击跳转与拖拽区分
在使用 Qt 编写界面应用时,QSlider 是一个常用的滑动控件。但你可能会注意到,默认情况下点击滑轨(groove)区域时,滑块并不会直接跳到鼠标点击的位置,而是按照内部的分页步进(page step)行为响应。此外,垂直 Slider 在点击最底部时还存在 releaseEvent(或 sliderRelea…...
Summary
一、数据结构 1.1 哈希 主要是HashMap和HashSet;其中HashSet底层是一个HashMap属性。 // 获取HashMap元素,HashSet均不支持 map.keySet (); // Set<k> map.values (; // Collection<V> map.entrySet();//Set<Map.Entry<K,V>> for (Map.E…...
MCP Server 开发实战 | 大模型无缝对接 Grafana
前言 随着大模型的飞速发展,越来越多的 AI 创新颠覆了过往很多产品的使用体验。但你是否曾想过,在向大型语言模型提问时,它能否根据你的需求精准返回系统中的对应数据?例如,当用户查询 Grafana 服务时,模型…...
【ROS2】行为树 BehaviorTree(六):各种各样的节点
1、装饰器节点 Decorators 1)否操作 Inverter 如果子项失败则返回 SUCCESS,如果子项成功则返回 FAILURE。 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 2)强制成功 ForceSuccess 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 否则,它总是返回 SUCCESS。 3)…...
Docker Swarm 集群使用指南概述
概述 对于简单轻量级集群管理,利用 Docker Swarm 就够用了,适合中小型应用程序的容器编排。如果是比较重的中心化集群管理方案或需要更复杂的功能,可以考虑使用 Kubernetes Helm Consul 等更强大的容器编排工具。 Docker Swarm 1. Docke…...
【行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构】
行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构 组件概述与背景 行业树选择器是一个基于Element Plus的ElTreeSelect封装的业务组件,主要应用于能源管理系统中,用于展示和选择国标行业分类体系的四级层级结构。该…...
PasteForm框架开发之Entity多级嵌套的表单的实现
你相信么,使用PasteForm框架开发,管理端居然不要写代码!!! 一起来看看PasteForm是否支持多级表模式(外表) 需求假设 假如有这么一个需求,就是订单表,包含了多级的信息,比如这个订单包含了哪些…...
Anaconda笔记
下载Anaconda 清华源 官方源 本文下载:Anaconda3-2024.10-1-Windows-x86_64.exe 建议不要安装到C盘,我的安装到D:Anaconda目录 设置环境变量 WinR cmd命令行输入: conda --version:可以查看到版本信息安装成功c…...
Linux——共享内存
目录 一、共享内存概念 二、共享内存的一些函数 2.1 shmget 创建共享内存 2.2 shmat 访问共享内存 2.3 shmdt 解除共享内存的映射 2.4 shnctl 删除共享内存段 三、共享内存 3.1 创建测试进程 3.2 使用循环测试 编辑 3.3 共享内存写入程序 3.4 带有信号量的共享内…...
计算机系统---烤机(性能测评)
计算机烤机 一、烤机的定义与核心目的 烤机(Burn-in Test) 是通过对计算机硬件施加持续高负载,模拟极端运行环境,以验证硬件稳定性、性能极限、散热能力及潜在缺陷的测试方法。核心目标包括: 硬件稳定性验证&#x…...
Linux命令+Git命令
Linux命令Git命令 linux查看两个操作系统cd命令的区别操作文件和文件夹vim不同模式保存和退出 Git linux Linux操作系统中,几乎所有的东西都以文件夹或文件形式存在,这些文件夹/文件有一个共同的根目录/。如果我们在某块磁盘A上(无其他分区&…...
【前端】Nuxt打包部署的几种方式
一、总结知识点 Nuxt 是基于 Vue 的服务端渲染框架,部署方式主要取决于你使用的 Nuxt 模式:Universal (SSR)、SPA 或 Static Site Generation (SSG)。不同模式下的打包部署流程略有不同。以下将分别介绍 Nuxt 应用的打包和部署方式。 二、详细说明 1. …...
DP 16bit位宽数据扰码实现和仿真
DisplayPort 1.4协议中数据需进行扰码,扰码用到了16-bit LFSR,表达式如下。 LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。 我们已利用这个框图进行8个时钟周期迭代,得到了和…...
力扣每日打卡 1534. 统计好三元组 (简单)
力扣 1534. 统计好三元组 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解2.1 方法一:枚举2.2 方法二:枚举优化 前言 这是刷算法题的第十二天,用到的语言是JS 题目:力扣 1534. 统计好三元组 (简单) 一、题目内容 给你一…...
CExercise_13_1排序算法_1插入排序
题目: 请自己手动实现插入排序算法: // 插入排序 void insertion_sort(int arr[], int len); 然后给定一个int数组,实现将它从小到大进行排序。 关键点 分析: 在插入排序中,稳定性指的是排序算法能够保持相等元素的原始…...
图论--DFS搜索图/树
目录 一、图的存储结构 二、题目练习 846. 树的重心 - AcWing题 dfs,之前学习的回溯算法好多都是用dfs实现搜索的(把题目抽象成树形结构来搜索),其实 回溯算法就是 深搜,只不过针对某一搜索场景 我们给他一个更细分…...
blender 超逼真角色daz 纹理材质 humanpro插件
https://www.youtube.com/KhanhVo-zp9lh/featured https://superhivemarket.com/products/humanpro https://superhivemarket.com/products/humanpro HUMANPRO 插件 - BLENDER HumanPro 是一款专为帮助用户轻松快速地创建高度精细逼真的人体皮肤纹理和复杂皱纹而设计的插件…...
关于响应式编程框架ReactiveUI的感悟
1.我第一个接触的MVVM框架是Caliburn Micro,后来接触到了ReactiveUI这种响应式编程思想的框架,主要说一下本人目前学习感想(针对尽快上手使用MVVM开发WPF); 首当其冲的工具是DeepSeek,总结好问题直接提问&…...
Swift —— delegate 设计模式
一、什么是 delegate 模式 所谓 delegate 就是代理模式。简单来说,delegate 模式就是在类的函数里运行完一段代码后,你可以通过一个符合某个代理协议的属性来调代理的方法。其中,代理方法就是回调函数。 二、delegate 模式与闭包比的优势 …...
远方游子的归家记:模仿美食网页的制作与实现
前言 2023年的夏天,闲得无聊学了一个礼拜前端知识点。并根据所学知识点模仿制作了一篇网络上公开发布的关于家乡美食的文章。今天才想到有这个不错的案例可以分享出来,以供大家学习参考。 知识点简介 运用的知识点比较简单,常规的div盒子&…...