Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

149 linhas
5.6KB

  1. using HealthMonitor.Model.Config;
  2. using Microsoft.Extensions.Logging;
  3. using Microsoft.Extensions.Options;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using TDengineDriver;
  10. using TDengineDriver.Impl;
  11. namespace HealthMonitor.Service.Biz.db
  12. {
  13. public class TDengineService
  14. {
  15. private readonly ILogger<TDengineService> _logger;
  16. private readonly TDengineServiceConfig _configTDengineService;
  17. public TDengineService(ILogger<TDengineService> logger, IOptions<TDengineServiceConfig> configTDengineService)
  18. {
  19. _logger = logger;
  20. _configTDengineService = configTDengineService.Value;
  21. }
  22. public IntPtr Connection()
  23. {
  24. string host = _configTDengineService.Host;
  25. string user = _configTDengineService.UserName;
  26. string db = _configTDengineService.DB;
  27. short port = _configTDengineService.Port;
  28. string password = _configTDengineService.Password;
  29. IntPtr conn = TDengine.Connect(host, user, password, db, port);
  30. //string host = "172.16.255.180";
  31. //short port = 6030;
  32. //string user = "root";
  33. //string password = "taosdata";
  34. //string db = "health_monitor";
  35. //IntPtr conn = TDengine.Connect(host, user, password, db, port);
  36. // Check if get connection success
  37. if (conn == IntPtr.Zero)
  38. {
  39. Console.WriteLine("Connect to TDengine failed");
  40. }
  41. else
  42. {
  43. Console.WriteLine("Connect to TDengine success");
  44. }
  45. return conn;
  46. }
  47. public void ExecuteSQL(IntPtr conn, string sql)
  48. {
  49. IntPtr res = TDengine.Query(conn, sql);
  50. // Check if query success
  51. if ((res == IntPtr.Zero) || (TDengine.ErrorNo(res) != 0))
  52. {
  53. Console.Write(sql + " failure, ");
  54. // Get error message while Res is a not null pointer.
  55. if (res != IntPtr.Zero)
  56. {
  57. Console.Write("reason:" + TDengine.Error(res));
  58. }
  59. }
  60. else
  61. {
  62. Console.Write(sql + " success, {0} rows affected", TDengine.AffectRows(res));
  63. //... do something with res ...
  64. // Important: need to free result to avoid memory leak.
  65. TDengine.FreeResult(res);
  66. }
  67. }
  68. public void ExecuteQuerySQL(IntPtr conn, string sql)
  69. {
  70. IntPtr res = TDengine.Query(conn, sql);
  71. // Check if query success
  72. if ((res == IntPtr.Zero) || (TDengine.ErrorNo(res) != 0))
  73. {
  74. Console.Write(sql + " failure, ");
  75. // Get error message while Res is a not null pointer.
  76. if (res != IntPtr.Zero)
  77. {
  78. Console.Write("reason:" + TDengine.Error(res));
  79. }
  80. }
  81. else
  82. {
  83. Console.Write(sql + " success, {0} rows affected", TDengine.AffectRows(res));
  84. //... do something with res ...
  85. List<TDengineDriver.TDengineMeta> resMeta = LibTaos.GetMeta(res);
  86. List<Object> resData = LibTaos.GetData(res);
  87. foreach (var meta in resMeta)
  88. {
  89. Console.Write($"\t|{meta.name} {meta.TypeName()} ({meta.size})\t|");
  90. }
  91. for (int i = 0; i < resData.Count; i++)
  92. {
  93. Console.Write($"|{resData[i].ToString()} \t");
  94. //Console.WriteLine("{0},{1},{2}", i, resMeta.Count, (i) % resMeta.Count);
  95. if (((i + 1) % resMeta.Count == 0))
  96. {
  97. Console.WriteLine("");
  98. }
  99. }
  100. // Important: need to free result to avoid memory leak.
  101. TDengine.FreeResult(res);
  102. }
  103. }
  104. public void CheckRes(IntPtr conn, IntPtr res, String errorMsg)
  105. {
  106. if (TDengine.ErrorNo(res) != 0)
  107. {
  108. throw new Exception($"{errorMsg} since: {TDengine.Error(res)}");
  109. }
  110. }
  111. public void ExecuteInsertSQL(IntPtr conn, string sql)
  112. {
  113. try
  114. {
  115. //sql = "INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) " +
  116. // "d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) " +
  117. // "d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000)('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) " +
  118. // "d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000)('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)";
  119. IntPtr res = TDengine.Query(conn, sql);
  120. CheckRes(conn, res, "failed to insert data");
  121. int affectedRows = TDengine.AffectRows(res);
  122. Console.WriteLine("affectedRows " + affectedRows);
  123. TDengine.FreeResult(res);
  124. }
  125. finally
  126. {
  127. TDengine.Close(conn);
  128. }
  129. }
  130. }
  131. }