【TDengine 使用环境】测试
【TDengine 版本】3.4.0.2
【操作系统以及版本】Linux
【部署方式】/非容器部署
问题描述
在使用 TDengine C# 驱动的 WebSocket 协议时,当调用 IStmt.Prepare() 准备一个 不包含参数占位符 ? 的查询语句时,会抛出异常。但如果在 SQL 中添加虚拟参数(如 WHERE ?=? ),则可以正常执行。分析是服务端传回的错误。错误内容为:【code:[0x2600],error:stmt only support select or insert at TDengine.Driver.Impl.WebSocketMethods.BaseConnection.WaitAndThrowOriginalException(Task task)】
其他环境信息
- C# 驱动版本:最新
- 连接协议:WebSocket
- 操作系统:Windows
复现步骤 步骤 1:创建连接
using (var client = new WSClient(builder))
{
// ...
}
``` 步骤 2:尝试准备无参数查询(失败)
using (var stmt = client.StmtInit())
{
//
抛出 TDengineError 异常
stmt.Prepare(“SELECT * FROM meters”);
}
错误信息 :[请补充实际错误信息]
步骤 3:准备带虚拟参数的查询(成功)
using (var stmt = client.StmtInit())
{
//
正常执行
stmt.Prepare(“SELECT * FROM meters WHERE ?=?”);
stmt.BindRow(new object { 1, 1 });
stmt.AddBatch();
stmt.Exec();
using (var rows = stmt.Result())
{
while (rows.Read())
{
// 处理结果
}
}
}
期望行为
IStmt.Prepare() 应该能够准备 不包含参数 的查询语句。
实际行为
- 无参数查询: Prepare(“SELECT * FROM meters”) → 抛出异常
- 有参数查询: Prepare(“SELECT * FROM meters WHERE id = ?”) → 正常执行