2015-12-02 78 views
0

当我尝试从Visual stutio使用C#中的Access数据库中插入数据我不断收到此错误在INSERT INTO语句中的System.Data.OleDb.OleDbException:语法错误。 “使用C#从Visual Studio插入数据从Visual Studio的Access数据库

保护无效Button1_Click1(对象发件人,EventArgs的) {

 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

一切在你的代码看起来很好 - 我认为它会起作用,这导致我相信它可能像字段名称中的拼写错误一样简单。你可以添加你的桌面布局的屏幕截图吗? – Hambone

回答

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)); 
+0

我做了建议的更改,但我仍然收到错误 –

+0

,我只使用地址框,因为我想确保GUID不会导致问题 –

+0

请指定这些错误是什么。我将向答案添加另一个潜在问题 – Steve

相关问题