106 lines
4.2 KiB
C#
106 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using TDengineDriver;
|
|
using TDengineDriver.Impl;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace TDengineExample
|
|
{
|
|
public class AsyncQueryExample
|
|
{
|
|
static void Main()
|
|
{
|
|
IntPtr conn = GetConnection();
|
|
QueryAsyncCallback queryAsyncCallback = new QueryAsyncCallback(QueryCallback);
|
|
TDengine.QueryAsync(conn, "select * from meters", queryAsyncCallback, IntPtr.Zero);
|
|
Thread.Sleep(2000);
|
|
TDengine.Close(conn);
|
|
TDengine.Cleanup();
|
|
}
|
|
|
|
static void QueryCallback(IntPtr param, IntPtr taosRes, int code)
|
|
{
|
|
if (code == 0 && taosRes != IntPtr.Zero)
|
|
{
|
|
FetchRawBlockAsyncCallback fetchRowAsyncCallback = new FetchRawBlockAsyncCallback(FetchRawBlockCallback);
|
|
TDengine.FetchRawBlockAsync(taosRes, fetchRowAsyncCallback, param);
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine($"async query data failed, failed code {code}");
|
|
}
|
|
}
|
|
|
|
// Iteratively call this interface until "numOfRows" is no greater than 0.
|
|
static void FetchRawBlockCallback(IntPtr param, IntPtr taosRes, int numOfRows)
|
|
{
|
|
if (numOfRows > 0)
|
|
{
|
|
Console.WriteLine($"{numOfRows} rows async retrieved");
|
|
IntPtr pdata = TDengine.GetRawBlock(taosRes);
|
|
List<TDengineMeta> metaList = TDengine.FetchFields(taosRes);
|
|
List<object> dataList = LibTaos.ReadRawBlock(pdata, metaList, numOfRows);
|
|
|
|
for (int i = 0; i < dataList.Count; i++)
|
|
{
|
|
if (i != 0 && (i+1) % metaList.Count == 0)
|
|
{
|
|
Console.WriteLine("{0}\t|", dataList[i]);
|
|
}
|
|
else
|
|
{
|
|
Console.Write("{0}\t|", dataList[i]);
|
|
}
|
|
}
|
|
Console.WriteLine("");
|
|
TDengine.FetchRawBlockAsync(taosRes, FetchRawBlockCallback, param);
|
|
}
|
|
else
|
|
{
|
|
if (numOfRows == 0)
|
|
{
|
|
Console.WriteLine("async retrieve complete.");
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine($"FetchRawBlockCallback callback error, error code {numOfRows}");
|
|
}
|
|
TDengine.FreeResult(taosRes);
|
|
}
|
|
}
|
|
|
|
static IntPtr GetConnection()
|
|
{
|
|
string host = "localhost";
|
|
short port = 6030;
|
|
string username = "root";
|
|
string password = "taosdata";
|
|
string dbname = "power";
|
|
var conn = TDengine.Connect(host, username, password, dbname, port);
|
|
if (conn == IntPtr.Zero)
|
|
{
|
|
Console.WriteLine("Connect to TDengine failed");
|
|
Environment.Exit(0);
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("Connect to TDengine success");
|
|
}
|
|
return conn;
|
|
}
|
|
}
|
|
}
|
|
|
|
// //output:
|
|
// // Connect to TDengine success
|
|
// // 8 rows async retrieved
|
|
|
|
// // 1538548685500 | 11.8 | 221 | 0.28 | california.losangeles | 2 |
|
|
// // 1538548696600 | 13.4 | 223 | 0.29 | california.losangeles | 2 |
|
|
// // 1538548685000 | 10.8 | 223 | 0.29 | california.losangeles | 3 |
|
|
// // 1538548686500 | 11.5 | 221 | 0.35 | california.losangeles | 3 |
|
|
// // 1538548685000 | 10.3 | 219 | 0.31 | california.sanfrancisco | 2 |
|
|
// // 1538548695000 | 12.6 | 218 | 0.33 | california.sanfrancisco | 2 |
|
|
// // 1538548696800 | 12.3 | 221 | 0.31 | california.sanfrancisco | 2 |
|
|
// // 1538548696650 | 10.3 | 218 | 0.25 | california.sanfrancisco | 3 |
|
|
// // async retrieve complete. |