使用C#从Visual Studio在Access数据库中插入数据

时间:2015-12-02 22:31:31

标签: c# visual-studio ms-access oledb

当我尝试使用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");    

}

1 个答案:

答案 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));