我想把数据插入到我的数据库中的表中,但是一个值需要是一个整数。如何解决这个问题?到目前为止,这是我的代码:我有3个可以放入值的文本框和一个发送它的按钮。
private void button1_Click(object sender, EventArgs e)
{
//Maak inert query
string sqlIns = @"INSERT INTO Pizza (Soort, beschrijving, prijs)
VALUES ('" + textBoxSoort.Text.Trim() + "','" + textBoxBescrhijving.Text.Trim() + "', '" + tetBoxPrijs +"') ";
//Maak commando object
OleDbCommand command = new OleDbCommand(sqlIns, Connectie);
try
{
//Open de connectie
Connectie.Open();
//Voer commando uit
command.ExecuteReader();
Connectie.Close();
//Opnieuw vullen DatagridVieuw
vullendgv();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message + ex.StackTrace, "Exception details");
}
finally
{
//Sluiten van de connectie
Connectie.Close();
textBoxSoort.Clear();
textBoxBescrhijving.Clear();
tetBoxPrijs.Clear();
}
}
答案 0 :(得分:2)
您的代码有几个问题:
使用参数化查询来阻止SQL注入。 Inline queries are the devil <!/ p>
在将输入放入查询之前验证输入。如果TextBox的值应为数字,请对此进行验证或使TextBox仅接受数字输入。要实现此目的,请创建一个方法来检查输入是否为数字(正则表达式或自定义代码),以及是否需要仅限数字的TetxBox读取this article。
使用正则表达式检查输入是否为数字的示例:
string numericPattern = "^[0-9]+$";
string input = "1zd23";
bool result1 = Regex.IsMatch(value, numericPattern); //false
string input = "456";
bool result2 = Regex.IsMatch(value, numericPattern); //true
在方法中:
public bool IsNumeric(string input)
{
return Regex.IsMatch(input, "^[0-9]+$");
}
//Usage:
bool result = IsNumeric("qsd4156"); //false
在您的查询中,您要将TextBox对象tetBoxPrijs
添加到查询中,而不是其值。同时省略单引号,否则在SQL中不会将其视为数值。请改用此代码
tetBoxPrijs.Text
但这必须是数字,所以这应该是:
Convert.ToInt32(tetBoxPrijs.Text)
当然这没有输入验证。验证可以使用提供的方法使用正则表达式完成:
if(IsNumeric(tetBoxPrijs.Text))
{
int prijs = Convert.ToInt32(tetBoxPrijs.Text);
//use 'prijs' in query
}
<强>更新强>
更简单的是使用GarethD评论的Int32.TryParse method:
int numericValue;
if(Int32.TryParse(tetBoxPrijs.Text, out numericValue))
{
//valid, use in query
}
else
{
//not numeric, inform the user
}