当我尝试使用C#从Visual stutio在Acess数据库中插入数据时,我不断收到此错误“System.Data.OleDb.OleDbException:INSERT INTO语句中的语法错误。”
protected void Button1_Click1(object sender,EventArgs e) {
Guid newGUID = Guid.NewGuid();
OleDbConnection conn = new OleDbConnection(" Provider = Microsoft.ACE.OLEDB.12.0;" + "Data Source = " + Server.MapPath("App_Data/Group.accdb"));
OleDbCommand command = new OleDbCommand ("INSERT INTO [User] ( [Userid], [UserName], [Password], [Email], [Country], [CartID], [Address] ) VALUES (@Uname,@password,@email,@country,@address,@userid,@cartID)", conn);
conn.Open();
command.Parameters.AddWithValue("@userid", Convert.ToString(newGUID));
command.Parameters.AddWithValue("@Uname", username.Text);
command.Parameters.AddWithValue("@password", username.Text);
command.Parameters.AddWithValue("@email", email.Text);
command.Parameters.AddWithValue("@country", DropDownList1.SelectedItem.ToString());
command.Parameters.AddWithValue("@cartID", Convert.ToString(newGUID));
command.Parameters.AddWithValue("@address", address.Text);
command.ExecuteNonQuery();
conn.Close();
Response.Redirect("Login.aspx");
Response.Write("Registration is successful");
}
答案 0 :(得分:0)
用户是保留关键字。您需要将其括在方括号之间,就像对字段
一样但是您的代码有更严重的错误 您的参数占位符与字段名称的顺序不正确。所以你需要修复查询然后记住它 OleDb参数不能通过名称识别,而是通过它们的位置识别。 因此,将参数添加到集合的代码应该遵循您要检索参数值的顺序
OleDbCommand command = new OleDbCommand (@"INSERT INTO [User]
( [Userid], [UserName], [Password], [Email],
[Country], [CartID], [Address] ) VALUES
( @userid, @Uname, @password,@email,
@country,@cartID, @address)", conn);
conn.Open();
command.Parameters.AddWithValue("@userid", address.Text);
command.Parameters.AddWithValue("@Uname", username.Text);
command.Parameters.AddWithValue("@password", username.Text);
command.Parameters.AddWithValue("@email", email.Text);
command.Parameters.AddWithValue("@country",DropDownList1.SelectedItem.ToString());
command.Parameters.AddWithValue("@cartID", address.Text);
command.Parameters.AddWithValue("@address", address.Text);
command.ExecuteNonQuery();
顺便说一下,您将用户名文本框传递给用户名字段和用户ID和密码。这似乎不太可能(地址文本框也一样)
最后,使用字符串来设置字段cartID和UserID的值似乎也是错误的。 AddWithValue方法无法知道参数将更新的字段的DataType是什么。因此它根据值的数据类型创建参数。在您的情况下,address.Text和username.Text是字符串,但如果数据库字段需要整数,则会发生错误。
如果是这种情况,您应该确定您有一个整数并使用
command.Parameters.AddWithValue("@userid", Convert.ToInt32(address.Text));
command.Parameters.AddWithValue("@cartID", Convert.ToInt32(address.Text));
无论如何最好使用正确的Add方法
command.Parameters.Add("@userid", OleDbType.Integer).Value = Convert.ToInt32(address.Text));