如何解决C#Textbox.Text转换为SQL SmallMoney
我有以下代码
String query = "INSERT INTO Product (ProductCode,Range,Type,Size,Description,Cost,Barcode) VALUE ('" + txbx_ProductCode.Text + "','" + txbx_Range.Text + "','" +
txbx_Type.Text + "','" + txbx_Size.Text + "','" + txbx_Description.Text + "','" + decimal.Parse(txbx_Cost.Text) + "','" + txbx_Barcode.Text + "')";
我在此行中收到以下FormatException: FormatException Image
我怀疑解析.text时出现问题。我尝试解析浮点,双精度,十进制和十进制。在所有情况下都是相同的。
输入的值在20000.00到100.00之间,始终有2个小数位,因此它们永远不会超过smallmoney值。
解决方法
尝试一下:
String query = "INSERT INTO Product (ProductCode,Range,Type,Size,Description,Cost,Barcode) VALUE ('" + txbx_ProductCode.Text + "','" + txbx_Range.Text + "','" +
txbx_Type.Text + "','" + txbx_Size.Text + "','" + txbx_Description.Text + "'," + decimal.Parse(txbx_Cost.Text) + ",'" + txbx_Barcode.Text + "')";
转换为小数后,您无需在成本周围添加单引号。
实际上,您甚至可能不需要Decimal.Parse。就是说,上面的代码可以正常工作,但实际上并不健壮,因此您可能要在构建sql字符串之前考虑验证所有输入,并且应该花一些时间来学习如何防止sql注入;您的代码很容易受到攻击,并且很容易有人在执行任意sql查询的输入字段中输入值,甚至删除行和表。
https://www.w3schools.com/sql/sql_injection.asp
,首先感谢E.J.布伦南(Brennan)和伊恩·坎普(Ian Kemp)使我走上了正确的道路。我不知道如何添加奖状或在StackOverflow上调用它,但谢谢。
我最终将所有内容添加到准备好的语句中,并出现了一些错误,但它们与我之前发现的错误和压扁的错误不同。
新方法如下:
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
//open database (closed below)
sqlCon.Open();
//sql query that inserts data into table using user inputs
String query = "INSERT INTO Product(ProductCode,Barcode) VALUES(@ProductCode,@Range,@Type,@Size," +
"@Description,@Cost,@Barcode) ";
//initialise sqlcommand using the query and connection
using var command = new SqlCommand(query,sqlCon);
//assign values and prepare them
command.Parameters.Add("@ProductCode",SqlDbType.VarChar,25).Value = txbx_ProductCode.Text;
command.Parameters.Add("@Range",20).Value = txbx_Range.Text;
command.Parameters.Add("@Type",50).Value = txbx_Type.Text;
command.Parameters.Add("@Size",15).Value = txbx_Size.Text;
command.Parameters.Add("@Description",100).Value = txbx_Description.Text;
command.Parameters.Add("@Cost",SqlDbType.SmallMoney).Value = Decimal.Parse(txbx_Cost.Text);
command.Parameters.Add("@Barcode",13).Value = txbx_Barcode.Text;
//prepare the added statements
command.Prepare();
//execute using nonqeury (cause of no expected return data)
command.ExecuteNonQuery();
//close database connection (opened above)
sqlCon.Close();
//display succesfull insertion
MessageBox.Show("Product succesfully added.");
}
PS。对不起所有评论,我只是想一眼就知道是什么。
是的,“为了爱所有圣洁,请使用准备好的陈述”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。