111 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.3 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();
 | |
|             try
 | |
|             {
 | |
|                 QueryAsyncCallback queryAsyncCallback = new QueryAsyncCallback(QueryCallback);
 | |
|                 TDengine.QueryAsync(conn, "select * from meters", queryAsyncCallback, IntPtr.Zero);
 | |
|                 Thread.Sleep(2000);
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 TDengine.Close(conn);
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         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
 | |
|             {
 | |
|                 throw new Exception($"async query data failed,code:{code},reason:{TDengine.Error(taosRes)}");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // 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
 | |
|                 {
 | |
|                     throw new Exception($"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)
 | |
|             {
 | |
|                 throw new Exception("Connect to TDengine failed");
 | |
|             }
 | |
|             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. |