private List <TelemetryDataDto> SqlToTDD(TaosConnection db, string sql, string prefix, string suffix, string keyname) { List <TelemetryDataDto> dt = new List <TelemetryDataDto>(); TaosDataReader dataReader = db.CreateCommand(sql).ExecuteReader(); while (dataReader.Read()) { TelemetryDataDto telemetry = new TelemetryDataDto(); byte datatype = (byte)dataReader[dataReader.GetOrdinal($"{prefix}value_type{suffix}")]; if (string.IsNullOrEmpty(keyname)) { telemetry.KeyName = dataReader.GetString(dataReader.GetOrdinal("keyname")); } else { telemetry.KeyName = keyname; } telemetry.DateTime = dataReader.GetDateTime(dataReader.GetOrdinal($"{prefix}ts{suffix}")); switch ((DataType)datatype) { case DataType.Boolean: telemetry.Value = dataReader.GetBoolean(dataReader.GetOrdinal($"{prefix}value_boolean{suffix}")); break; case DataType.String: telemetry.Value = dataReader.GetString(dataReader.GetOrdinal($"{prefix}value_string{suffix}")); break; case DataType.Long: telemetry.Value = dataReader.GetInt64(dataReader.GetOrdinal($"{prefix}value_long{suffix}")); break; case DataType.Double: telemetry.Value = dataReader.GetDouble(dataReader.GetOrdinal($"{prefix}value_double{suffix}")); break; case DataType.Json: case DataType.XML: case DataType.Binary: telemetry.Value = dataReader.GetString(dataReader.GetOrdinal($"{prefix}value_string{suffix}")); break; case DataType.DateTime: telemetry.Value = dataReader.GetDateTime(dataReader.GetOrdinal($"{prefix}value_datetime{suffix}")); break; default: break; } dt.Add(telemetry); } return(dt); }
/// <summary> /// 转换获取到的值 /// </summary> /// <param name="db"></param> /// <param name="sql"></param> /// <param name="prefix"></param> /// <param name="suffix"></param> /// <param name="keyname"></param> /// <returns></returns> /// <exception cref="https://github.com/taosdata/TDengine/issues/4269">务必注意此bug</exception> private List <TelemetryDataDto> SqlToTDD(TaosConnection db, string sql, string prefix, string suffix, string keyname) { List <TelemetryDataDto> dt = new List <TelemetryDataDto>(); TaosDataReader dataReader = db.CreateCommand(sql).ExecuteReader(); while (dataReader.Read()) { TelemetryDataDto telemetry = new TelemetryDataDto(); try { int idx = dataReader.GetOrdinal($"{prefix}value_type{suffix}"); byte datatype; if (dataReader.FieldCount > idx && idx >= 0) { datatype = dataReader.GetByte(idx); } else { throw new Exception($"字段{prefix}value_type{suffix}的Index={idx}小于0或者大于FieldCount{dataReader.FieldCount},更多信息请访问 HelpLink") { HelpLink = "https://github.com/taosdata/TDengine/issues/4269" }; } if (string.IsNullOrEmpty(keyname)) { telemetry.KeyName = dataReader.GetString(dataReader.GetOrdinal("keyname")); } else { telemetry.KeyName = keyname; } telemetry.DateTime = dataReader.GetDateTime(dataReader.GetOrdinal($"{prefix}ts{suffix}")); switch ((DataType)datatype) { case DataType.Boolean: telemetry.Value = dataReader.GetBoolean(dataReader.GetOrdinal($"{prefix}value_boolean{suffix}")); break; case DataType.String: telemetry.Value = dataReader.GetString(dataReader.GetOrdinal($"{prefix}value_string{suffix}")); break; case DataType.Long: telemetry.Value = dataReader.GetInt64(dataReader.GetOrdinal($"{prefix}value_long{suffix}")); break; case DataType.Double: telemetry.Value = dataReader.GetDouble(dataReader.GetOrdinal($"{prefix}value_double{suffix}")); break; case DataType.Json: case DataType.XML: case DataType.Binary: telemetry.Value = dataReader.GetString(dataReader.GetOrdinal($"{prefix}value_string{suffix}")); break; case DataType.DateTime: telemetry.Value = dataReader.GetDateTime(dataReader.GetOrdinal($"{prefix}value_datetime{suffix}")); break; default: break; } } catch (Exception ex) { _logger.LogError(ex, $"{telemetry.KeyName}遇到{ex.Message}, sql:{sql}"); } if (!string.IsNullOrEmpty(telemetry.KeyName)) { dt.Add(telemetry); } } return(dt); }