SQL语句,OleDbException错误INSERT

时间:2013-05-08 13:03:30

标签: c# asp.net database ms-access

代码中没有错误,但数据库中没有出现任何信息。

        string mysql;
        mysql = "INSERT INTO Cars(Make,Model,Price,[Image]) VALUES ('"
        + tbMake.Text + "','" + tbModel.Text + "'," + tbPrice.Text + ",'" +         FileUpload1.FileName + "')";
        siteDB.InsertCommand = mysql;
        DataList1.DataBind();

干杯。

2 个答案:

答案 0 :(得分:3)

对于Access数据库,IMAGE一词是保留关键字 如果你想使用它,你需要用方形支架封装

"INSERT INTO Cars(Make,Model,Price,[Image]) VALUES ......"

这将解决您的即时问题,但正如John Skeet在其评论中指出的那样,您需要使用参数化查询,因为这也解决了正确格式化文本值的问题。

如果型号名称(或品牌)包含单引号,您的方便查询会发生什么? 另一个语法错误正等着你(根据我的经验,当你完成代码并准备好工作时它会咬你)

只是为了完成答案,请随意测试是否以这种方式将记录添加到数据库

 mysql = "INSERT INTO Cars(Make,Model,Price,[Image]) VALUES (?,?,?,?)";
 OleDbCommand cmd = new OleDbCommand(mysql, con);
 cmd.Parameters.AddWithValue("@p1", tbMake.Text);
 cmd.Parameters.AddWithValue("@p2", tbModel.Text);
 cmd.Parameters.AddWithValue("@p3", Convert.ToDecimal(tbPrice.Text));  
 cmd.Parameters.AddWithValue("@p4", FileUpload1.FileName);
 cmd.ExecuteNonQuery();

答案 1 :(得分:0)

我假设siteDB是SQLDataAdapter。 在这种情况下,您的代码至少应更改为:

string mysql;
        mysql = "INSERT INTO Cars(Make,Model,Price,Image) VALUES ('"
        + tbMake.Text + "','" + tbModel.Text + "'," + tbPrice.Text + ",'" +         FileUpload1.FileName + "')";
        siteDB.InsertCommand = mysql;
        DataList1.DataBind();