我正在使用连接到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();
}
答案 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)
希望这有帮助