【问题标题】:INSERT error ASP.NET插入错误 ASP.NET
【发布时间】:2013-05-09 16:06:16
【问题描述】:

嘿,当我插入数据库时​​,我收到一条错误消息,说我的代码有问题,找不到它。该错误表明它在 INSERT 语句中,但出现在 "cmd.ExecuteNonQuery();" 行上。我正在使用访问数据库。

错误:INSERT INTO 语句中的语法错误。

con.Open();
string mysql; 
mysql = "INSERT INTO [User](FirstName,Surname,Age,HouseNumber,PostCode,Username,Password) 
         VALUES (?,?,?,?,?,?,?)";
OleDbCommand cmd = new OleDbCommand(mysql, con);
cmd.Parameters.AddWithValue("@p1", tbFirstName.Text);
cmd.Parameters.AddWithValue("@p2", tbSurname.Text);
cmd.Parameters.AddWithValue("@p3", int.Parse(tbAge.Text));
cmd.Parameters.AddWithValue("@p4", tbAddress1.Text);
cmd.Parameters.AddWithValue("@p5", tbPostCode.Text);
cmd.Parameters.AddWithValue("@p6", tbUsername.Text);
cmd.Parameters.AddWithValue("@p7", tbPassword.Text);
cmd.ExecuteNonQuery();
con.Close();

【问题讨论】:

  • 确切的错误信息是什么?你的桌子怎么样?
  • INSERT INTO 语句中的语法错误。数据库字段反映插入语句的字段。

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


【解决方案1】:

当你添加带有值的参数时,你需要将其转换为匹配类型,如果年龄是数字,那么

cmd.Parameters.AddWithValue("@p3", int.Parse(tbAge.Text));

还有User is key word你可以试试

"INSERT INTO [User] ([FirstName], [Surname], [Age], [HouseNumber], [PostCode], [Username], [Password]) VALUES (?,?,?,?,?,?,?)";

【讨论】:

  • 添加这个,谢谢,但仍然收到相同的错误消息。
  • @ChristopherDunne [PASSWORD] 也是保留字,更好的是你可以通过为所有列和表名添加[] 来测试
  • 修好了,谢谢,所有这些复杂的答案,就是这样:)
【解决方案2】:

您是否尝试将? 替换为您的参数?

更正:我相信你必须像这样添加OleDBParameters

con.Open();
string mysql; 
mysql = "INSERT INTO User(FirstName,Surname,Age,HouseNumber,PostCode,Username,Password) 
     VALUES (@p1,@p2,@p3,@p4,@p5,@p6,@p7)";
OleDbCommand cmd = new OleDbCommand(mysql, con);
cmd.Parameters.AddRange(new OleDbParameter[]
{
    new OleDbParameter("@p1", tbFirstName.Text),
    new OleDbParameter("@p2", tbSurname.Text),
           ...
});
cmd.ExecuteNonQuery();
con.Close();

【讨论】:

  • Access 数据库需要 "?"
  • 试了试,什么也没做。错误仍然存​​在,谢谢。
  • 好像少了一个括号,在哪里关闭,试试看,干杯。
  • 现在我得到... ArgumentException 未被用户代码处理... OleDbParameter 已包含在另一个 OleDbParameterCollection 中。
  • The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多