【问题标题】:Syntax error in INSERT INTO statement ASP.Net C#INSERT INTO 语句中的语法错误 ASP.Net C#
【发布时间】:2016-01-02 09:57:25
【问题描述】:

首先,是的,我知道还有其他几个问题。我已经审查并尝试了其中提出的不同解决方案;但是,当我单击提交按钮运行该函数时,我仍然收到“语法错误 INSERT INTO 语句”消息。

我正在运行 VS 2015 和 Access 2010 数据库。完整的错误信息如下:

Data.OleDb.OleDbException (0x80040E14):INSERT INTO 中的语法错误 陈述。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult 小时)在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 在 createAcc.btnCreateAccount_Click(Object sender, EventArgs e) in e:\Documents\Visual Studio 2015\WebSites\OneStopFurniture\createAcc.aspx.cs:43 行

我的按钮处理程序代码如下:

protected void btnCreateAccount_Click(object sender, EventArgs e)
{
    connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=E:\\Documents\\Visual Studio 2015\\WebSites\\OneStopFurniture\\App_Data\\OneStopFur.accdb";
    string InsertQuery;
    try
    {
        connection.Open();
        OleDbCommand cmdInsert = new OleDbCommand();
        cmdInsert.Connection = connection;

        InsertQuery= "INSERT INTO [userInfo] (
           userName, password, firstName, lastName, userAddress, userCity, userZip, userPhone, userEmail
        ) VALUES (
           @userName, @password, @firstName, @lastName, @userAddress, @userCity, @userState, @userZip, @userPhone, @userEmail
        )";
        cmdInsert.Parameters.AddWithValue("@userName", txtUserName.Text);
        cmdInsert.Parameters.AddWithValue("@password", txtPassword.Text);
        cmdInsert.Parameters.AddWithValue("@firstName", txtFirstName.Text);
        cmdInsert.Parameters.AddWithValue("@lastName", txtLastName.Text);
        cmdInsert.Parameters.AddWithValue("@userAddress", txtAddress.Text);
        cmdInsert.Parameters.AddWithValue("@userCity", txtCity.Text);
        cmdInsert.Parameters.AddWithValue("@userState", txtState.Text);
        cmdInsert.Parameters.AddWithValue("@userZip", txtZip.Text);
        cmdInsert.Parameters.AddWithValue("@userPhone", txtPhone.Text);
        cmdInsert.Parameters.AddWithValue("@userEmail", txtEmail.Text);

        cmdInsert.CommandText = InsertQuery;
        cmdInsert.ExecuteNonQuery();
        lblConfirm.Visible = true;
        lblConfirm.Text = "Account creation successful.";
    }
    catch (Exception ex)
    {
        lblConfirm.Visible = true;
        lblConfirm.Text = "Unable to create" + ex;

    }
}

谁能告诉我我在这里俯瞰什么?在这一点上,我完全失败了。

谢谢。

【问题讨论】:

  • 10个参数9列
  • 更好的查询格式可以帮助您自己找到这个错误。看看我所做的更改以及目标列现在如何与值对齐?现在扫描和比较要容易得多。

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


【解决方案1】:

即时错误是由单词Password 引起的。这是 MS-Access 中的保留关键字。在它周围使用方括号。

InsertQuery= @"INSERT INTO [userInfo](userName, [password], firstName, 
  lastName, userAddress, userCity, userState, userZip, 
  userPhone, userEmail) 
  VALUES(@userName, @password, @firstName, 
  @lastName, @userAddress, @userCity, @userState, @userZip, 
  @userPhone, @userEmail)";

修复此错误后,您还需要添加列 UserState(或其他任何名称),因为您已为其添加了参数。

请记住,在 OleDb 中,参数是位置性的。这意味着第一个字段从第一个参数接收值,无论您使用什么名称,因此缺少字段或反转集合中参数的位置可能会导致很难发现错误。在这里加倍支票。

【讨论】:

    【解决方案2】:

    列列表中缺少 UserState

    InsertQuery= "INSERT INTO [userInfo]
                ([userName], [password], [firstName], [lastName], [userAddress], [userCity], [userState], [userZip], [userPhone], [userEmail])
         VALUES(@userName, @password, @firstName, @lastName, @userAddress, @userCity, @userState, @userZip, @userPhone, @userEmail)";
    

    最好的做法是引用所有内容以避免与关键字冲突。

    【讨论】:

    • @Steve 你的意思是密码关键字?
    • 是的,Syntax Error是由Password这个词引起的,那么发帖人就会得到参数意外引起的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多