news 2026/4/21 21:20:51

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/4/21 10:01:40

union 和 union all的区别

1、union和union all UNION对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;相当于使用distinct关键字。而UNION ALL则对两个结果集进行并集操作&#xff0c;包括重复行&#xff0c;即所有结果全部显示&#xff0c;不管是否重复。 UNION操作会去除重复的记录&…

作者头像 李华
网站建设 2026/4/21 10:01:10

爱心公益 PPT 一键生成平台 TOP6,无需设计基础也能做

6款好用工具推荐&#xff0c;新手也能搞定爱心公益PPT一键生成 作为经常帮公益组织和校园社团做PPT的过来人&#xff0c;我太懂新手做爱心公益PPT的痛点了&#xff1a;找模板耗半天、排版没思路、素材怕侵权&#xff0c;最后熬夜做出来的效果还不尽如人意。其实现在有很多实用工…

作者头像 李华
网站建设 2026/4/21 10:01:10

中小企业必看!RFID资产管理系统,不用大投入也能高效管资产

跟不少中小企业老板和运维聊过&#xff0c;发现大家对资产管理都有个矛盾心理&#xff1a;想做好管理&#xff0c;又怕投入太多成本&#xff0c;最后得不偿失&#xff1b;放任不管&#xff0c;又总被资产混乱、盘点耗时、流失浪费等问题拖后腿。尤其是对于人员精简、预算有限的…

作者头像 李华
网站建设 2026/4/21 10:00:52

互联网大厂Java面试场景:从Spring到微服务的技术探讨

互联网大厂Java面试场景&#xff1a;从Spring到微服务的技术探讨 场景&#xff1a;互联网大厂面试现场 面试官是一位经验丰富的技术专家&#xff0c;而求职者“超好吃”则是一位刚刚准备进入互联网大厂的Java小白程序员。面试官开始了严肃而循序渐进的面试。 第一轮提问&…

作者头像 李华
网站建设 2026/4/21 10:00:17

智能体持久性记忆实战:从0到1构建双路记忆堆栈

本文介绍如何为智能体构建持久性记忆系统&#xff0c;通过双路记忆堆栈&#xff08;情节记忆语义记忆&#xff09;解决智能体健忘问题。情节记忆使用向量数据库存储对话历史&#xff0c;语义记忆使用图数据库存储结构化事实。文章详细展示了实现方法、代码构建及实际应用&#…

作者头像 李华
网站建设 2026/4/21 10:00:47

大模型学习全攻略:从零基础到AI专家的系统路线,【2026首发】AI大模型学习路线:适合新手和大学生

本文提供了从入门到高级的大模型学习完整路线&#xff0c;涵盖Python编程、数学基础、机器学习、深度学习等基础知识&#xff0c;以及自然语言处理、计算机视觉等进阶内容&#xff0c;并提供实战案例和学习资源&#xff0c;帮助小白和程序员系统掌握大模型技术&#xff0c;实现…

作者头像 李华