日期:2014-05-18  浏览次数:20867 次

程序通过了 数据库却丝毫没有变化 ACCESS,请高手点拨下小弟,谢谢了。
protected void myDataGrid_Update(Object sender, DataGridCommandEventArgs e)
  {
  string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=";
  strConn += Server.MapPath("..\\database\\sbpc.mdb");

  // 使用OleDb .NET数据提供程序创建连接
  OleDbConnection oleConnection = new OleDbConnection(strConn);
   
  // 打开数据库连接
   
  OleDbCommand myCommand; //创建命令对象
  string UpdateCmd;
  UpdateCmd = "UPDATE PK301 SET ybwh=@ybwh where ID=@ID ";
  myCommand = new OleDbCommand(UpdateCmd, oleConnection);//设置命令对象
  //获得更改数据
  myCommand.Parameters.Add(new OleDbParameter("@ID", OleDbType.SmallInt,2));
  myCommand.Parameters["@ID"].Value = myDataGrid.DataKeys[e.Item.ItemIndex];
  myCommand.Parameters.Add(new OleDbParameter("@ybwh", OleDbType.VarChar ,15));
  myCommand.Parameters["@ybwh"].Value=((TextBox)e.Item.Cells[4].Controls[0]).Text;
  try
  {
  oleConnection.Open();
  myCommand.ExecuteNonQuery();
  myDataGrid.EditItemIndex = -1;
  oleConnection.Close();
  data_show();
  }
public void data_show()
  {
  string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=";
  strConn += Server.MapPath("..\\database\\sbpc.mdb");
  string area = DropDownList2.SelectedValue;
  string Sql = "SELECT DISTINCT * FROM " + " " + area; 
   
  // 建立连接
  OleDbConnection oleConnection = new OleDbConnection(strConn);
   

  // 定义一张表格
  DataTable table = new DataTable();
  OleDbDataAdapter adapter = new OleDbDataAdapter(Sql, strConn);
  DataSet data = new DataSet();
  adapter.Fill(table);
  DataView dataView = new DataView(table);

  PagedDataSource ps = new PagedDataSource();
  ps.DataSource = data.Tables;
  myDataGrid.PageSize = dataView.Count;

  // 数据绑定
  myDataGrid.DataSource = dataView;
  myDataGrid.DataBind();
   
  }

myCommand.Parameters["@ybwh"].Value=((TextBox)e.Item.Cells[4].Controls[0]).Text; 在数据库中第2条记录原始值是 PSLL35002-A 
在调试的过程中修该但是仍然是PSLL35002-A ,抓狂了一天,数据库中压根就没有变化 、怎么办啊?


------解决方案--------------------
没仔细看程序,我怀疑是没有Commit引起的,建议Commit一下看看。
------解决方案--------------------
又没有用事务,不用Commit。
怀疑是myCommand.Parameters的用法
------解决方案--------------------
参数写法不对. 应该这样
UpdateCmd = "UPDATE PK301 SET ybwh=? where ID=? "; 
myCommand = new OleDbCommand(UpdateCmd, oleConnection);//设置命令对象 
//获得更改数据 
myCommand.Parameters.Add(new OleDbParameter("ybwh", OleDbType.VarChar ,15)); 
myCommand.Parameters["ybwh"].Value=((TextBox)e.Item.Cells[4].Controls[0]).Text; 
myCommand.Parameters.Add(new OleDbParameter("ID", OleDbType.SmallInt,2)); 
myCommand.Parameters["ID"].Value = myDataGrid.DataKeys[e.Item.ItemIndex]; 

------解决方案--------------------
最有可能的就是你的语句的顺序,给Access的带参数SQL语句传参数是靠的是参数的顺序,而不是名称