INSERT INTO语句中的语法错误(Microsoft Access)

时间:2013-04-18 12:28:17

标签: syntax insert ms-access-2010

我正在使用连接到Access数据库(2010)的Visual Studio 2010。

我创建了一个按钮,用于将文本框中的项添加到数据库中,我收到错误“INSERT INTO语句中的语法错误”

    protected void upload_Click(object sender, EventArgs e)
{
    if (FileUpload3.HasFile)
    {
        try
        {
            string filename = Path.GetFileName(FileUpload3.FileName);
            FileUpload3.SaveAs(Server.MapPath("images") + "/" + filename);
            Picture.Text = "images/" + filename;
            Label2.Text = "";
        }
        catch (Exception ex)
        {

            Label2.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }



    }
}

protected void addnewitem_Click(object sender, EventArgs e)
{


    AccessDataSource1.InsertCommand = "Insert into RAM (RAM Name, picture) values ('" + name.Text.ToString() + ",'" + Picture.Text.ToString() + "')";

    AccessDataSource1.Insert();
}

3 个答案:

答案 0 :(得分:1)

尝试一些SQL注入:在您在“名称”文本框中输入的文本附加单引号。

如果它有效,那么请在查询中使用参数,而不是附加来自用户的文本。

进一步阅读:

http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html

How do parameterized queries help against SQL injection?

<强>更新

同样使用Alberto Spelta对原始问题的评论中的更正(括号中包含空格的列名称:“RAM Name”=&gt;“[RAM Name]”)。这是另一个语法错误以及省略的单引号。

答案 1 :(得分:1)

你错过了一句话:

"... values ('" + name.Text.ToString() + "','" + Picture.Text.ToString() + "')"
                                          ^

但是你不应该像这样使用字符串连接 - 改为使用正确的参数化查询,你不会看到这些问题(或者当你的数据包含单引号时会遇到更危险的注入问题)。

答案 2 :(得分:1)

尝试

([RAM Name], picture)

而不是

(RAM Name, picture)

希望这有帮助