Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }