用一个整数值向数据库中插入数据

本文关键字:数据库 插入 数据 整数 一个 | 更新日期: 2023-09-27 18:09:48

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

用一个整数值向数据库中插入数据

你的代码有几个问题:

  • 使用参数化查询来防止SQL注入。内联查询是魔鬼!

  • 在将输入放入查询之前验证输入。如果TextBox的值应该是数字,则验证它或使TextBox只接受数字输入。要实现这一点,创建一个方法来检查输入是否是数字(正则表达式或自定义代码),如果您想要一个纯数字的TetxBox读取本文

    使用正则表达式检查输入是否是数字的例子:

    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-object tetBoxPrijs添加到查询中,而不是其值。还要去掉单引号,否则在SQL中不会将其视为数值。使用以下代码代替

    tetBoxPrijs.Text
    

    但这必须是数字所以这应该是:

    Convert.ToInt32(tetBoxPrijs.Text)
    

    当然,这是没有输入验证的。可以使用正则表达式

    使用所提供的方法进行验证:
    if(IsNumeric(tetBoxPrijs.Text))
    {
        int prijs = Convert.ToInt32(tetBoxPrijs.Text);
        //use 'prijs' in query
    }
    

更新:

更简单的是使用Int32。如GarethD:

所述,TryParse方法
int numericValue;
if(Int32.TryParse(tetBoxPrijs.Text, out numericValue))
{
    //valid, use in query
}
else
{
    //not numeric, inform the user
}