使用一个整数值将数据插入数据库

时间:2014-06-23 12:41:01

标签: c# sql

我想把数据插入到我的数据库中的表中,但是一个值需要是一个整数。如何解决这个问题?到目前为止,这是我的代码:我有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();
    }
}

1 个答案:

答案 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
}