【问题标题】:Syntax error in INSERT INTO Statement while trying to input values in the Database尝试在数据库中输入值时 INSERT INTO 语句中的语法错误
【发布时间】:2013-03-29 13:48:57
【问题描述】:

嗨,我基本上是在创建一个注册页面。我收到一条错误消息,提示“INSERT INTO 语句中的语法错误”。有时也会收到错误消息,说明连接已打开或其他内容。它以前在不同的表和不同的字段等中工作......代码如下

public partial class Registration : System.Web.UI.Page
{
    static OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\New folder\Project 1.0\WebSite1\New Microsoft Office Access 2007 Database.accdb");
    OleDbDataAdapter ada = new OleDbDataAdapter();
    OleDbCommand cmd = new OleDbCommand();
    OleDbDataReader dr;
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
    string str = "insert into User_Registeration (First_Name, Last_name, Phone_No, Username, Password, Email, Address, City, Country, Zipcode)" +
         "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    con.Open();
    cmd = new OleDbCommand(str, con);
    cmd.Parameters.AddWithValue("@p1", TextBox1.Text);
    cmd.Parameters.AddWithValue("@p2", TextBox2.Text);
    cmd.Parameters.AddWithValue("@p3", TextBox3.Text);
    cmd.Parameters.AddWithValue("@p4", TextBox4.Text);
    cmd.Parameters.AddWithValue("@p5", TextBox5.Text);
    cmd.Parameters.AddWithValue("@p6", TextBox6.Text);
    cmd.Parameters.AddWithValue("@p7", TextBox8.Text);
    cmd.Parameters.AddWithValue("@p8", TextBox12.Text);
    cmd.Parameters.AddWithValue("@p9", TextBox9.Text);
    cmd.Parameters.AddWithValue("@p10", TextBox11.Text);
    cmd.ExecuteNonQuery();
    con.Close();
}

}

而我的mc访问表结构如下...

ID First_Name Last_name Phone_No 用户名密码电子邮件地址城市国家邮政编码

有人可以帮帮我吗? :) 谢谢你:)

【问题讨论】:

  • 请显示实际的错误信息。
  • 1.连接没有关闭。连接的当前状态是打开的。
  • 2.INSERT INTO 语句语法错误。

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


【解决方案1】:

你应该使用这个查询:

  string str = "insert into User_Registeration (First_Name, Last_name, Phone_No, [Username], [Password], [Email], [Address], City, Country, Zipcode)" +
     " values (@p1, @p2, @p3,@p4, @p5,@p6, @p7,@p8,@p9,@p10)";

【讨论】:

  • 检查 cmd.ExecuteNonQuery() >0 那么你的数据是否被插入。
  • 这次仍然是一个错误,它的不同 - “查询值和目标字段的数量不一样。”
  • @ Zeeshand Anjum 嗨 :) 我如何检查?你能告诉我吗?我对这一切真的很陌生>.
  • user2107703 在字符串中输入了两次@p8
  • 是的,@p8 出现了两次!谢谢它的工作!谢谢 :) 但我有时会收到另一个错误“连接未关闭。连接的当前状态是打开的。”有什么我可以做的吗?尽管如此,它不会每次都来..
【解决方案2】:

问题是由 PASSWORD 一词引起的。这个词是reserved word in JET (MS-Access)
要在 sql 命令中使用该词,您需要用方括号将其封装起来。

当然,当您向查询添加参数时,您应该确保添加查询中占位符所期望的确切数量的参数。
您有 10 个占位符 (?),因此您需要 10 个参数并按照各个字段预期的确切顺序

所以,总结一下

string str = "insert into User_Registeration (First_Name, Last_name, Phone_No, " + 
             "Username, [Password], Email, Address, City, Country, Zipcode)" +
             "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

【讨论】:

  • 是的,明白了!非常感谢!顺便说一句,感谢您早些时候也帮助我解决了我提出的问题:)
【解决方案3】:

您在这一行中缺少一个空格:

string str = "insert into User_Registeration (First_Name, Last_name, Phone_No, Username, Password, Email, Address, City, Country, Zipcode)" +
     "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

应该是:

string str = "insert into User_Registeration (First_Name, Last_name, Phone_No, Username, Password, Email, Address, City, Country, Zipcode)" +
     " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

【讨论】:

  • 仍然收到相同的错误“INSERT INTO 语句中的语法错误”。指向 cmd.ExecuteNonQuery();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多