使用Ms access 2010的C#数据库应用程序

时间:2013-11-27 19:35:58

标签: c#

我正在使用MS Access为我的香水店开发C#上的数据库应用程序,我创建了一个ms访问的表,名为“MIX”,有列(品牌名称,库存数量,零售价格,原价)。我想通过我创建的C#窗口形式添加它们的字段。

我正在尝试以下查询来插入我的数据但是我一直收到错误“INSERT INTO语句中的语法错误”

 private void button1_Click(object sender, EventArgs e)
    {
        con.Open();
        string str = string.Format("Insert into MIX([Brand name],Stock quantity,Retail price,Original price)Values('" + textBox1.Text + "'," + textBox2.Text + "," + textBox3.Text + "," + textBox4.Text + ")");
        OleDbCommand cmd = new OleDbCommand(str,con);
        cmd.ExecuteNonQuery();
        MessageBox.Show("Successfull");
        cmd.Dispose();
    }

3 个答案:

答案 0 :(得分:3)

四件事:

  1. 当您只是连接值时,您不需要string.Format
  2. 带空格的列名必须用方括号括起来:

    string str = "Insert into MIX " + 
                 "([Brand name],[Stock quantity],[Retail price],[Original price]) " + 
                 "Values('" + textBox1.Text + "'," + textBox2.Text + "," + textBox3.Text + "," + textBox4.Text + ")";
    
  3. 您应该学习如何使用参数而不是连接SQL:

    string str = "Insert into MIX " + 
                 "([Brand name],[Stock quantity],[Retail price],[Original price]) " + 
                 "Values (?,?,?,?)");
    OleDbCommand cmd = new OleDbCommand(str,con);
    cmd.Parameters.AddWithValue("brand",textBox1.Text);
    ... repeat for other values
    
  4. 您似乎正在重用共享的OleDbConnection对象。这不是最佳实践,因为连接在.NET中汇集并且在第一次使用后重新创建便宜,并且您不必担心在应用程序的整个生命周期中保持连接打开。

答案 1 :(得分:0)

这是一个非常糟糕的主意,因为值会直接放入查询中,但您遇到的问题是多字列名称:

Insert into MIX([Brand name],Stock quantity,Retail price,Original price)

这些需要围绕它们:

Insert into MIX([Brand name],[Stock quantity],[Retail price],[Original price])[

答案 2 :(得分:0)

您需要包含包含空格insquare bracket []的列名。此外,您需要使用参数而不是像SQL那样将值连接到SQL查询。谷歌“SQL注入攻击”要知道原因。

Insert into MIX([Brand name],[Stock quantity],[Retail price],[Original price])Values(?,?,?,?)

你用这种方式替换那些?:

cmd.Parameters.AddWithValue("?", Textbox1.text);
cmd.Parameters.AddWithValue("?", Textbox2.text);
cmd.Parameters.AddWithValue("?", Textbox3.text);
cmd.Parameters.AddWithValue("?", Textbox4.text);

请注意,订单很重要。

相关问题