-1

我正在使用连接到 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();
}
4

3 回答 3

1

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

如果可行,则在查询中使用参数,而不是附加用户的文本。

进一步阅读:

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

参数化查询如何帮助防止 SQL 注入?

更新

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

于 2013-04-18T12:32:19.357 回答
1

您缺少单引号:

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

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

于 2013-04-18T12:33:01.493 回答
1

尝试

([RAM Name], picture)

代替

(RAM Name, picture)

希望这可以帮助

于 2013-04-19T17:03:56.703 回答