带逗号的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
,而不是使用float
。 float
是一种不准确的数据类型,因此存在舍入问题等问题。在文本框方面,为什么不设置验证停止除数字和小数点以外的字符。
首先,您的代码极易受到 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的主要内容,如果未能解决你的问题,请参考以下文章