You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求FT Optix中获取SQL列平均值(Int格式)的C#代码方案

FT Optix中SQL平均值转Int格式的实现方案

你的代码已经具备基础转换逻辑,但可以优化类型安全处理,同时单独提取出可直接用于后续计算的Int数值:

关键修改说明

  • 增加数据库返回空值的判断,避免转换异常
  • 将转换后的Int值单独存储为变量,方便后续计算调用
  • 保留原有Label显示逻辑的同时,强化数值可用性

修改后的完整代码

#region StandardUsing
using System;
using System.Text;
using UAManagedCore;
using Store = FTOptix.Store;
#endregion

public class QueryResultLabelLogic : FTOptix.NetLogic.BaseNetLogic
{
    public override void Start()
    {
        periodicTask = new PeriodicTask(IncrementDecrementTask, 60, LogicObject);
        periodicTask.Start();
        longRunningTask.Start();
    }

    public override void Stop()
    {
        periodicTask.Dispose();
        periodicTask = null;
        longRunningTask.Dispose();
        longRunningTask = null;
    }

    [FTOptix.NetLogic.ExportMethod]
    public void StartMethod()
    {
        periodicTask.Start();
    }

    [FTOptix.NetLogic.ExportMethod]
    public void StopMethod()
    {
        periodicTask.Cancel();
    }

    private void IncrementDecrementTask()
    {
        var project = FTOptix.HMIProject.Project.Current;
        var myStore = project.GetObject("DataStores").Get<Store.Store>("ODBCDatabase");
        object[,] resultSet;
        string[] header;

        myStore.Query("SELECT AVG(Actual_Speed) FROM OEEDataLogging", out header, out resultSet);

        if (resultSet.Rank != 2)
            return;

        var rowCount = resultSet != null ? resultSet.GetLength(0) : 0;
        var columnCount = header != null ? header.Length : 0;

        if (rowCount > 0 && columnCount > 0)
        {
            // 处理数据库返回空值或DBNull的情况
            var avgValue = resultSet[0, 0];
            int avgIntValue = 0;
            if (avgValue != DBNull.Value && avgValue != null)
            {
                // 将平均值转换为Int32,自动对浮点值取整
                avgIntValue = Convert.ToInt32(avgValue);
            }

            // 此处可直接使用avgIntValue执行后续计算
            // 示例:计算平均值的2倍
            int calculatedValue = avgIntValue * 2;

            // 更新Label显示结果
            var queryResultLabel = LogicObject.Owner as FTOptix.UI.Label;
            queryResultLabel.Text = avgIntValue.ToString();
            // 若需显示计算后结果,可替换为:queryResultLabel.Text = calculatedValue.ToString();
        }
    }

    private PeriodicTask periodicTask;
    private LongRunningTask longRunningTask;
}

额外说明

  • 当数据库中无数据导致AVG(Actual_Speed)返回NULL时,代码默认将Int值设为0,可根据实际需求调整默认值
  • Convert.ToInt32会自动对浮点型平均值取整(如123.6转为124,123.4转为123),若需精确控制取整方式:
    • 向下取整:(int)Math.Floor(Convert.ToDouble(avgValue))
    • 向上取整:(int)Math.Ceiling(Convert.ToDouble(avgValue))

内容的提问来源于stack exchange,提问作者Chandan Suthar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:07:04