不更新访问数据库中的值

时间:2015-07-30 07:41:38

标签: c# asp.net

protected void Button2_Click(object sender, EventArgs e)
{
    OleDbConnection con = new OleDbConnection();
    con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\sandesh.k\Documents\PARAM_REP.accdb;";
    OleDbCommand com = new OleDbCommand();
    com.CommandText = "UPDATE LOGI SET [PASSWORD]=@PASS,NAME=@NAME,CAPABILITY=@CAPABLE WHERE ID=@ID";
    com.Parameters.AddWithValue("@ID", TextBox2.Text);
    com.Parameters.AddWithValue("@PASS", TextBox7.Text);
    com.Parameters.AddWithValue("@NAME", TextBox5.Text);
    com.Parameters.AddWithValue("@CAPABLE", Convert.ToInt32(TextBox6.Text));
    con.Open();
    com.Connection = con;
    com.ExecuteNonQuery();
    con.Close();
    ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('REPORT CREATED SUCCESSFULLY')</script>");
}

1 个答案:

答案 0 :(得分:3)

你没有告诉使用什么是错误但是......

OleDbCommand不支持命名参数。 实际上是支持但它只是不关心他们的名字。唯一的问题是他们的命令。

使用您在命令中定义的相同顺序设置参数;

com.Parameters.AddWithValue("@PASS", TextBox7.Text);
com.Parameters.AddWithValue("@NAME", TextBox5.Text);
com.Parameters.AddWithValue("@CAPABLE", Convert.ToInt32(TextBox6.Text));
com.Parameters.AddWithValue("@ID", TextBox2.Text);

还可以使用using statement自动处理您的连接和命令,而不是手动调用Close方法。并且不要使用AddWithValue方法。 It may generate unexpected and surprising results sometimes。使用Add方法重载来指定参数类型及其大小。

using(var con = new OleDbConnection())
using(var com = con.CreateCommand())
{
   // Set your CommandText property.
   // Add your parameters with Add method in the same order that you defined.
   // Open your connection.
   // Execute your query.
}

此外,强烈怀疑您的ID列应该是数字值,而不是基于其名称的字符类型。