news 2026/3/10 15:45:35

TDengine C# 语言连接器进阶指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TDengine C# 语言连接器进阶指南

本指南面向已完成“能连通、能读写”的开发者,补齐高级用法与易踩坑点。

1. 连接参数进阶与调优

WebSocket 连接增强参数

WebSocket 连接除基础参数外,还支持:

  • connTimeout:连接超时(默认 1 分钟)
  • readTimeout:读取超时(默认 5 分钟)
  • writeTimeout:发送超时(默认 10 秒)
  • enableCompression:是否启用压缩
  • autoReconnect:是否自动重连
  • reconnectRetryCount/reconnectIntervalMs:重连次数与间隔
  • token:TDengine Cloud Token
  • useSSL:是否启用 SSL

示例连接字符串:

protocol=WebSocket;host=127.0.0.1;port=6041;useSSL=false;enableCompression=true;autoReconnect=true;reconnectIntervalMs=10;reconnectRetryCount=5

连接级别时区(3.1.8+)

  • 仅支持 .NET 6+,仅支持 IANA 时区格式(如America/New_York
  • timezone互斥
  • Windows 平台原生连接不支持

2. RequestId 与可观测性

部分 API 支持传入reqId,便于日志/链路追踪。

usingTDengine.Driver;usingTDengine.Driver.Client;varbuilder=newConnectionStringBuilder("host=localhost;port=6030;username=root;password=taosdata");using(varclient=DbDriver.Open(builder)){using(varrows=client.Query("SELECT ts, current FROM power.meters LIMIT 1",3)){while(rows.Read()){/*...*/}}}

无模式写入时可通过ReqId.GetReqId()生成请求 ID(见第 4 节)。

3. 批量写入:Stmt 绑定

高吞吐写入推荐使用Stmt批量绑定。示例来自官方stmtInsert

usingTDengine.Driver;usingTDengine.Driver.Client;varbuilder=newConnectionStringBuilder("host=127.0.0.1;port=6030;username=root;password=taosdata");using(varclient=DbDriver.Open(builder)){client.Exec("CREATE DATABASE IF NOT EXISTS power");client.Exec("USE power");client.Exec("CREATE STABLE IF NOT EXISTS meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))");using(varstmt=client.StmtInit()){stringsql="INSERT INTO ? USING meters TAGS(?,?) VALUES (?,?,?,?)";stmt.Prepare(sql);stmt.SetTableName("d_bind_1");stmt.SetTags(newobject[]{1,"location_1"});stmt.BindRow(newobject[]{DateTime.Now,12.3f,220,0.32f});stmt.AddBatch();stmt.Exec();Console.WriteLine($"Inserted:{stmt.Affected()}");}}

完整示例见 stmtInsert/Program.cs。

4. 无模式写入(Schemaless)

支持 Influx Line Protocol / OpenTSDB Telnet / JSON。

usingTDengine.Driver;usingTDengine.Driver.Client;varlineDemo="meters,groupid=2,location=California.SanFrancisco current=10.3000002f64,voltage=219i32,phase=0.31f64 1626006833639";vartelnetDemo="metric_telnet 1707095283260 4 host=host0 interface=eth0";varjsonDemo="{\"metric\": \"metric_json\",\"timestamp\": 1626846400,\"value\": 10.3, \"tags\": {\"groupid\": 2, \"location\": \"California.SanFrancisco\", \"id\": \"d1001\"}}";varbuilder=newConnectionStringBuilder("protocol=WebSocket;host=127.0.0.1;port=6041;username=root;password=taosdata");using(varclient=DbDriver.Open(builder)){client.Exec("CREATE DATABASE IF NOT EXISTS power");client.Exec("USE power");client.SchemalessInsert(new[]{lineDemo},TDengineSchemalessProtocol.TSDB_SML_LINE_PROTOCOL,TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_MILLI_SECONDS,0,ReqId.GetReqId());client.SchemalessInsert(new[]{telnetDemo},TDengineSchemalessProtocol.TSDB_SML_TELNET_PROTOCOL,TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_MILLI_SECONDS,0,ReqId.GetReqId());client.SchemalessInsert(new[]{jsonDemo},TDengineSchemalessProtocol.TSDB_SML_JSON_PROTOCOL,TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_NOT_CONFIGURED,0,ReqId.GetReqId());}

完整示例见 wssml/Program.cs。

5. TMQ 订阅与消费

适用于流式消费场景。核心步骤:创建 consumer、订阅 topic、消费消息、提交 offset。

usingTDengine.TMQ;varcfg=newDictionary<string,string>(){{"td.connect.port","6030"},{"auto.offset.reset","latest"},{"msg.with.table.name","true"},{"enable.auto.commit","true"},{"auto.commit.interval.ms","1000"},{"group.id","group1"},{"client.id","client1"},{"td.connect.ip","127.0.0.1"},{"td.connect.user","root"},{"td.connect.pass","taosdata"},};IConsumer<Dictionary<string,object>>consumer=newConsumerBuilder<Dictionary<string,object>>(cfg).Build();consumer.Subscribe(newList<string>(){"topic_meters"});using(varcr=consumer.Consume(100)){if(cr!=null){foreach(varmessageincr.Message){Console.WriteLine($"{message.Value["ts"]},{message.Value["current"]}");}}}

完整示例见 subscribe/Program.cs。

6. 时间类型与参数绑定注意事项

  • DateTime.Kind == Unspecified不可用于绑定(会导致 UTC 转换错误)。
  • 3.1.8+ 支持DateTimeOffsetlong(与数据库时间精度一致)。
  • 如需统一跨平台时区,优先使用 IANA 时区(如Asia/Shanghai)。

7. 资源与性能最佳实践

  • 使用using管理连接、结果集与消费者,确保及时释放。
  • 大批量写入优先用Stmt或无模式写入;避免逐条Exec
  • WebSocket 大量数据可开启enableCompression,降低带宽。
  • 异常统一捕获TDengineError,打印CodeError

8. 参考与更多示例

  • 连接器参考文档:https://docs.taosdata.com/tdengine-reference/client-libraries/csharp/
  • 示例代码目录:https://github.com/taosdata/TDengine/tree/main/docs/examples/csharp

关于TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 10:37:56

dify制作的工作流如何通过API调用

大家在基于dify开发Workflow和Agent,一般都是通过dify提供app功能直接提供使用,或者通过嵌入到其他页面中使用,但是还有一种情况,特别是针对各种数据处理的Workflow,需要通过程序调用,返回数据供其他app使用。该如何做呢?本文主要基于dify,将通过工作流发布的API,通过…

作者头像 李华
网站建设 2026/3/5 2:31:54

强烈安利8个AI论文软件,MBA毕业论文轻松搞定!

强烈安利8个AI论文软件&#xff0c;MBA毕业论文轻松搞定&#xff01; AI 工具助力论文写作&#xff0c;高效降重更省心 在当前的学术环境中&#xff0c;MBA 学生面临着日益繁重的论文写作任务。无论是开题报告、大纲搭建&#xff0c;还是初稿撰写和最终润色&#xff0c;都需要耗…

作者头像 李华
网站建设 2026/3/9 23:52:13

遥感小目标检测难题一次解决:YOLOv8 + RepVGG + QueryDet 实战全指南

文章目录 一、引言与技术背景 1.1 目标检测技术的重要性与广泛应用 1.2 深度学习在目标检测领域的革命性进展 1.3 YOLO系列算法的发展历程与YOLOv8的技术创新 二、实验环境搭建与数据集深度分析 2.1 硬件环境配置的重要性与最佳实践 2.2 软件环境配置与依赖管理最佳实践 2.3 遥…

作者头像 李华