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

如何判断用户输入值是否落在数据表指定两列的数值区间内

需求说明
  • 现有SQL Server数据表seri,表中balance_current_min、balance_current_max两列用于存储3.5~3.6区间的随机值
  • 需要实现校验逻辑:将用户输入的cell_voltage数值,与上述两列存储的阈值做比对,判断输入值是否落在两个阈值构成的闭区间范围内
对应建表语句
CREATE TABLE [dbo].[seri](
[id] [int] IDENTITY(1,1) NOT NULL,
[seri_no] [nvarchar](50) NOT NULL,
[test_tarihi] [datetime] NOT NULL,
[test_operator] [int] NOT NULL,
[cell_voltage] [nvarchar](50) NULL,
[voltage_min] [nvarchar](50) NULL,
[voltage_max] [nvarchar](50) NULL,
[cell_balance_current] [nvarchar](50) NULL,
[balance_current_min] [nvarchar](50) NULL,
[balance_current_max] [nvarchar](50) NULL,
[Cell_1] [nvarchar](50) NULL)

CONSTRAINT [PK_seri_1] PRIMARY KEY CLUSTERED
当前已编写的比对代码
private void textEdit1_TextChanged(object sender, EventArgs e)
{
    double s1 = Convert.ToDouble(txtcell1min.Text);             
    double s2 = Convert.ToDouble(txtcell1max.Text);             
    double s3 = Convert.ToDouble(textEdit1.Text);

    if (s3 >= s1 && s3 <= s2)
    {
        checkEdit1.Checked  = true;
    }
    else
    {
        checkEdit1.Checked = false;
    }
} 
现有代码问题与修正方案
  • 缺少输入合法性校验:如果输入框内容为空、包含非数字字符,Convert.ToDouble会直接抛出格式异常,导致程序崩溃
  • 未兼容阈值存反的边界情况:如果balance_current_min实际存值大于balance_current_max,原判断逻辑会直接失效
  • 表结构存在设计隐患:所有存储数值的字段都使用了nvarchar类型,转数值时容易因区域格式问题(比如小数点、千分位识别偏差)导致转换错误

修正后的可直接运行代码:

private void textEdit1_TextChanged(object sender, EventArgs e)
{
    checkEdit1.Checked = false;
    // 校验三个输入值是否为合法双精度浮点数,非法输入直接返回
    if (!double.TryParse(txtcell1min.Text, out double minThreshold) 
        || !double.TryParse(txtcell1max.Text, out double maxThreshold)
        || !double.TryParse(textEdit1.Text, out double inputVoltage))
    {
        return;
    }
    // 自动修正阈值顺序,兼容min、max存反的场景
    double rangeMin = Math.Min(minThreshold, maxThreshold);
    double rangeMax = Math.Max(minThreshold, maxThreshold);
    // 直接通过判断结果给复选框赋值,省略冗余if-else
    checkEdit1.Checked = inputVoltage >= rangeMin && inputVoltage <= rangeMax;
}

优化建议:如果可以调整表结构,建议将所有存储数值的字段(balance_current_min、balance_current_max、cell_voltage等)从nvarchar类型替换为对应数值类型(decimal/float),从存储层规避格式转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:18:22