300 lines
10 KiB
Plaintext
300 lines
10 KiB
Plaintext
---
|
||
toc_max_heading_level: 4
|
||
sidebar_label: C#
|
||
title: C# Connector
|
||
---
|
||
|
||
import Tabs from '@theme/Tabs';
|
||
import TabItem from '@theme/TabItem';
|
||
|
||
import Preparation from "./_preparation.mdx"
|
||
import CSInsert from "../07-develop/03-insert-data/_cs_sql.mdx"
|
||
import CSInfluxLine from "../07-develop/03-insert-data/_cs_line.mdx"
|
||
import CSOpenTSDBTelnet from "../07-develop/03-insert-data/_cs_opts_telnet.mdx"
|
||
import CSOpenTSDBJson from "../07-develop/03-insert-data/_cs_opts_json.mdx"
|
||
import CSQuery from "../07-develop/04-query-data/_cs.mdx"
|
||
import CSAsyncQuery from "../07-develop/04-query-data/_cs_async.mdx"
|
||
|
||
`TDengine.Connector` 是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。
|
||
|
||
`TDengine.Connector` 连接器支持通过 TDengine 客户端驱动(taosc)建立与 TDengine 运行实例的连接,提供数据写入、查询、数据订阅、schemaless 数据写入、参数绑定接口数据写入等功能。 `TDengine.Connector` 还支持 WebSocket,通过 DSN 建立 WebSocket 连接,提供数据写入、查询、参数绑定接口数据写入等功能。
|
||
|
||
本文介绍如何在 Linux 或 Windows 环境中安装 `TDengine.Connector`,并通过 `TDengine.Connector` 连接 TDengine 集群,进行数据写入、查询等基本操作。
|
||
|
||
注意:`TDengine.Connector` 3.x 不兼容 TDengine 2.x,如果在运行 TDengine 2.x 版本的环境下需要使用 C# 连接器请使用 TDengine.Connector 的 1.x 版本 。
|
||
|
||
`TDengine.Connector` 的源码托管在 [GitHub](https://github.com/taosdata/taos-connector-dotnet/tree/3.0)。
|
||
|
||
## 支持的平台
|
||
|
||
支持的平台和 TDengine 客户端驱动支持的平台一致。
|
||
|
||
## 版本支持
|
||
|
||
请参考[版本支持列表](../#版本支持)
|
||
|
||
## 支持的功能特性
|
||
|
||
<Tabs defaultValue="rest">
|
||
|
||
<TabItem value="native" label="原生连接">
|
||
|
||
1. 连接管理
|
||
2. 普通查询
|
||
3. 连续查询
|
||
4. 参数绑定
|
||
5. 数据订阅(TMQ)
|
||
6. Schemaless
|
||
|
||
</TabItem>
|
||
|
||
<TabItem value="rest" label="WebSocket 连接">
|
||
|
||
1. 连接管理
|
||
2. 普通查询
|
||
3. 连续查询
|
||
4. 参数绑定
|
||
|
||
</TabItem>
|
||
|
||
</Tabs>
|
||
|
||
## 安装步骤
|
||
|
||
### 安装前准备
|
||
|
||
* 安装 [.NET SDK](https://dotnet.microsoft.com/download)
|
||
* [Nuget 客户端](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools) (可选安装)
|
||
* 安装 TDengine 客户端驱动,具体步骤请参考[安装客户端驱动](../#安装客户端驱动)
|
||
|
||
### 使用 dotnet CLI 安装
|
||
|
||
<Tabs defaultValue="CLI">
|
||
<TabItem value="CLI" label="使用 dotnet CLI 获取 C# 驱动">
|
||
|
||
可以在当前 .NET 项目的路径下,通过 dotnet 命令引用 Nuget 中发布的 `TDengine.Connector` 到当前项目。
|
||
|
||
``` bash
|
||
dotnet add package TDengine.Connector
|
||
```
|
||
|
||
</TabItem>
|
||
<TabItem value="source" label="使用源码获取 C# 驱动">
|
||
|
||
也可以[下载源码](https://github.com/taosdata/taos-connector-dotnet/tree/3.0),直接引用 TDengine.Connector 库
|
||
|
||
```bash
|
||
git clone -b 3.0 https://github.com/taosdata/taos-connector-dotnet.git
|
||
cd taos-connector-dotnet
|
||
cp -r src/ myProject
|
||
|
||
cd myProject
|
||
dotnet add exmaple.csproj reference src/TDengine.csproj
|
||
```
|
||
</TabItem>
|
||
</Tabs>
|
||
|
||
## 建立连接
|
||
|
||
<Tabs defaultValue="rest">
|
||
|
||
<TabItem value="native" label="原生连接">
|
||
|
||
使用 host、username、password、port 等信息建立连接。
|
||
|
||
``` csharp
|
||
using TDengineDriver;
|
||
|
||
namespace TDengineExample
|
||
{
|
||
|
||
internal class EstablishConnection
|
||
{
|
||
static void Main(String[] args)
|
||
{
|
||
string host = "localhost";
|
||
short port = 6030;
|
||
string username = "root";
|
||
string password = "taosdata";
|
||
string dbname = "";
|
||
|
||
var conn = TDengine.Connect(host, username, password, dbname, port);
|
||
if (conn == IntPtr.Zero)
|
||
{
|
||
Console.WriteLine("Connect to TDengine failed");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Connect to TDengine success");
|
||
}
|
||
TDengine.Close(conn);
|
||
TDengine.Cleanup();
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
</TabItem>
|
||
|
||
<TabItem value="rest" label="WebSocket 连接">
|
||
|
||
使用 DSN 建立 WebSocket 连接 DSN 连接。 描述字符串基本结构如下:
|
||
|
||
```text
|
||
[<protocol>]://[[<username>:<password>@]<host>:<port>][/<database>][?<p1>=<v1>[&<p2>=<v2>]]
|
||
|------------|---|-----------|-----------|------|------|------------|-----------------------|
|
||
| protocol | | username | password | host | port | database | params |
|
||
```
|
||
|
||
各部分意义见下表:
|
||
|
||
* **protocol**: 显示指定以何种方式建立连接,例如:`ws://localhost:6041` 指定以 Websocket 方式建立连接(支持http/ws)。
|
||
|
||
* **username/password**: 用于创建连接的用户名及密码(默认`root/taosdata`)。
|
||
|
||
* **host/port**: 指定创建连接的服务器及端口,WebSocket 连接默认为 `localhost:6041` 。
|
||
|
||
* **database**: 指定默认连接的数据库名,可选参数。
|
||
|
||
* **params**:其他可选参数。
|
||
|
||
``` csharp
|
||
{{#include docs/examples/csharp/wsConnect/Program.cs}}
|
||
```
|
||
|
||
</TabItem>
|
||
</Tabs>
|
||
|
||
## 使用示例
|
||
|
||
### 写入数据
|
||
|
||
#### SQL 写入
|
||
|
||
<Tabs defaultValue="rest">
|
||
|
||
<TabItem value="native" label="原生连接">
|
||
|
||
<CSInsert />
|
||
|
||
</TabItem>
|
||
|
||
<TabItem value="rest" label="WebSocket 连接">
|
||
|
||
```csharp
|
||
{{#include docs/examples/csharp/wsInsert/Program.cs}}
|
||
```
|
||
|
||
</TabItem>
|
||
|
||
</Tabs>
|
||
|
||
#### InfluxDB 行协议写入
|
||
|
||
<CSInfluxLine />
|
||
|
||
#### OpenTSDB Telnet 行协议写入
|
||
|
||
<CSOpenTSDBTelnet />
|
||
|
||
#### OpenTSDB JSON 行协议写入
|
||
|
||
<CSOpenTSDBJson />
|
||
|
||
#### 参数绑定
|
||
|
||
<Tabs defaultValue="rest">
|
||
|
||
<TabItem value="native" label="原生连接">
|
||
|
||
``` csharp
|
||
{{#include docs/examples/csharp/stmtInsert/Program.cs}}
|
||
```
|
||
|
||
</TabItem>
|
||
|
||
<TabItem value="rest" label="WebSocket 连接">
|
||
|
||
```csharp
|
||
{{#include docs/examples/csharp/wsStmt/Program.cs}}
|
||
```
|
||
|
||
</TabItem>
|
||
|
||
</Tabs>
|
||
|
||
### 查询数据
|
||
|
||
#### 同步查询
|
||
|
||
<Tabs defaultValue="rest">
|
||
|
||
<TabItem value="native" label="原生连接">
|
||
|
||
<CSQuery />
|
||
|
||
</TabItem>
|
||
|
||
<TabItem value="rest" label="WebSocket 连接">
|
||
|
||
```csharp
|
||
{{#include docs/examples/csharp/wsQuery/Program.cs}}
|
||
```
|
||
|
||
</TabItem>
|
||
|
||
</Tabs>
|
||
|
||
#### 异步查询
|
||
|
||
<CSAsyncQuery />
|
||
|
||
### 更多示例程序
|
||
|
||
|示例程序 | 示例程序描述 |
|
||
|--------------------------------------------------------------------------------------------------------------------|--------------------------------------------|
|
||
| [CURD](https://github.com/taosdata/taos-connector-dotnet/blob/3.0/examples/Query/Query.cs) | 使用 TDengine.Connector 实现的建表、插入、查询示例 |
|
||
| [JSON Tag](https://github.com/taosdata/taos-connector-dotnet/blob/3.0/examples/JSONTag) | 使用 TDengine.Connector 实现的写入和查询 JSON tag 类型数据的示例 |
|
||
| [stmt](https://github.com/taosdata/taos-connector-dotnet/tree/3.0/examples/Stmt) | 使用 TDengine.Connector 实现的参数绑定插入和查询的示例 |
|
||
| [schemaless](https://github.com/taosdata/taos-connector-dotnet/blob/3.0/examples/schemaless) | 使用 TDengine.Connector 实现的使用 schemaless 写入的示例 |
|
||
| [async query](https://github.com/taosdata/taos-connector-dotnet/blob/3.0/examples/AsyncQuery/QueryAsync.cs) | 使用 TDengine.Connector 实现的异步查询的示例 |
|
||
| [数据订阅(TMQ)](https://github.com/taosdata/taos-connector-dotnet/blob/3.0/examples/TMQ/TMQ.cs) | 使用 TDengine.Connector 实现的订阅数据的示例 |
|
||
| [Basic WebSocket Usage](https://github.com/taosdata/taos-connector-dotnet/blob/5a4a7cd0dbcda114447cdc6d0c6dedd8e84a52da/examples/WS/WebSocketSample.cs) | 使用 TDengine.Connector 的 WebSocket 基本的示例 |
|
||
| [Basic WebSocket STMT](https://github.com/taosdata/taos-connector-dotnet/blob/5a4a7cd0dbcda114447cdc6d0c6dedd8e84a52da/examples/WS/WebSocketSTMT.cs) | 使用 TDengine.Connector 的 WebSocket STMT 基本的示例 |
|
||
|
||
## 重要更新记录
|
||
|
||
| TDengine.Connector | 说明 |
|
||
|--------------------|--------------------------------|
|
||
| 3.0.1 | 支持 WebSocket 和 Cloud,查询,插入,参数绑定。 |
|
||
| 3.0.0 | 支持 TDengine 3.0.0.0,不兼容 2.x。新增接口TDengine.Impl.GetData(),解析查询结果。 |
|
||
| 1.0.7 | 修复 TDengine.Query()内存泄露。 |
|
||
| 1.0.6 | 修复 schemaless 在 1.0.4 和 1.0.5 中失效 bug。 |
|
||
| 1.0.5 | 修复 Windows 同步查询中文报错 bug。 |
|
||
| 1.0.4 | 新增异步查询,订阅等功能。修复绑定参数 bug。 |
|
||
| 1.0.3 | 新增参数绑定、schemaless、 json tag等功能。 |
|
||
| 1.0.2 | 新增连接管理、同步查询、错误信息等功能。 |
|
||
|
||
## 其他说明
|
||
|
||
### 第三方驱动
|
||
|
||
[`IoTSharp.Data.Taos`](https://github.com/IoTSharp/EntityFrameworkCore.Taos) 是一个 TDengine 的 ADO.NET 连接器,其中包含了用于EntityFrameworkCore 的提供程序 IoTSharp.EntityFrameworkCore.Taos 和健康检查组件 IoTSharp.HealthChecks.Taos ,支持 Linux,Windows 平台。该连接器由社区贡献者`麦壳饼@@maikebing` 提供,具体请参考:
|
||
|
||
* 接口下载: <https://github.com/IoTSharp/EntityFrameworkCore.Taos>
|
||
* 用法说明:<https://www.taosdata.com/blog/2020/11/02/1901.html>
|
||
|
||
## 常见问题
|
||
|
||
1. "Unable to establish connection","Unable to resolve FQDN"
|
||
|
||
一般是因为 FQDN 配置不正确。可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html)解决。
|
||
|
||
2. Unhandled exception. System.DllNotFoundException: Unable to load DLL 'taos' or one of its dependencies: 找不到指定的模块。
|
||
|
||
一般是因为程序没有找到依赖的客户端驱动。解决方法为:Windows 下可以将 `C:\TDengine\driver\taos.dll` 拷贝到 `C:\Windows\System32\ ` 目录下,Linux 下建立如下软链接 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。
|
||
|
||
## API 参考
|
||
|
||
[API 参考](https://docs.taosdata.com/api/connector-csharp/html/860d2ac1-dd52-39c9-e460-0829c4e5a40b.htm)
|