带逗号的TextBox变成sql

Posted

技术标签:

【中文标题】带逗号的TextBox变成sql【英文标题】:TextBox with comma into sql 【发布时间】:2018-12-16 00:29:15 【问题描述】:

我正在尝试将带有十进制值的文本框插入到 sql 中。 如果文本框将包含点,那么它可以正常工作,但是如果有人使用逗号而不是点怎么办?我怎样才能抓住这两种情况?

例如我想插入值 1,9

con.Open();
SqlCommand cmd = new SqlCommand("Insert into inventory (price) values ('" + Convert.ToDecimal(textBox1.Text) + "')", con);
cmd.ExecuteNonQuery();
con.Close();

我将数据类型 varchar 转换为浮点数时出错。 我需要用户在文本框、点或逗号中输入的任何内容将其作为浮点值转换为 sql

【问题讨论】:

请为您的 SQL 设置参数!另外,我强烈推荐decimal,而不是使用floatfloat 是一种不准确的数据类型,因此存在舍入问题等问题。在文本框方面,为什么不设置验证停止除数字和小数点以外的字符。 首先,您的代码极易受到 SQL 注入攻击。您需要使用参数化查询 第二。将 Decimal.TryParse() 与正确的文化信息一起使用 Dmitry 是替换正确的方法吗?我的意思是,如果我将它运行到另一台具有其他全球化设置的计算机上怎么办?这种方法适用于所有国家的全球化背景吗? maccettura 我应该为此发送列的数据类型吗? 如果有人输入文本,替换将无济于事:1'); DROP TABLE inventory;-- 【参考方案1】:

如果您不知道用户是否会使用逗号或句点作为小数点分隔符(不了解他们的文化),您可以同时尝试这两种方式。下面是一个参数化的例子。

    decimal decimalValue;

    NumberFormatInfo formatWithPeriod = CultureInfo.InvariantCulture.NumberFormat;
    if (!Decimal.TryParse(textBox.Text, NumberStyles.AllowDecimalPoint, formatWithPeriod, out decimalValue))
    
        NumberFormatInfo formatWithComma = (NumberFormatInfo)formatWithPeriod.Clone();
        formatWithComma.NumberDecimalSeparator = ",";
        if (!Decimal.TryParse(textBox.Text, NumberStyles.AllowDecimalPoint, formatWithComma, out decimalValue))
        
            //error here
            return;
        
    

    con.Open();
    SqlCommand cmd = new SqlCommand("Insert into inventory (price) values (@price);", con);
    var priceParameter = cmd.Parameters.Add("@price", SqlDbType.Decimal);
    priceParameter.Precision = 18;
    priceParameter.Scale = 2;
    priceParameter.Value = decimalValue;
    cmd.ExecuteNonQuery();
    con.Close();

【讨论】:

以上是关于带逗号的TextBox变成sql的主要内容,如果未能解决你的问题,请参考以下文章

如何插入带有逗号的值并出现错误

TextBox 不支持系统十进制(点或逗号)

用逗号格式化数字PHP [重复]

如何让HTML的TEXTAREA显示带格式的文本

双倍小数分隔符 WPF

WPF 实现带标题的TextBox