public void MyDataGrid_Delete(Object sender, DataGridCommandEventArgs e)
{
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+ Server.MapPath("new.mdb"));
String deleteCmd = "DELETE from aa where id = @Id";
OleDbCommand myCommand = new OleDbCommand(deleteCmd, myConnection);
myCommand.Parameters.Add(new OleDbParameter("@Id", OleDbType.Char, 11));
myCommand.Parameters["@Id"].Value = MyList.DataKeys[(int)e.Item.ItemIndex];
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
DataBind();
}
---------
myCommand.Parameters.Add(new OleDbParameter("@Id", OleDbType.Char, 11));
myCommand.Parameters["@Id"].Value = MyList.DataKeys[(int)e.Item.ItemIndex];
这两句什么意思 看不明白 去掉后 又无法实现删除???
-----------
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();执行myCommand.ExecuteNonQuery();的时候 一定要加comm的open 和close吗?
我以前写过累世的东西 没有加 一样正常啊 加不加的区别在哪里?

解决方案 »

  1.   

    myCommand.Parameters.Add(new OleDbParameter("@Id", OleDbType.Char, 11));
    myCommand.Parameters["@Id"].Value = MyList.DataKeys[(int)e.Item.ItemIndex];把id作为参数,用作值传递
      

  2.   

    String deleteCmd = "DELETE from aa where id = @Id";myCommand.Parameters.Add(new OleDbParameter("@Id", OleDbType.Char, 11));
    myCommand.Parameters["@Id"].Value = MyList.DataKeys[(int)e.Item.ItemIndex];
    给命令添加参数,为Id赋值;
    comm.Open()是打开数据库连接close()则关闭连接
      

  3.   

    不开连接能ExecuteNonQuery()?我试过怎么不行呢?
    连接一定要Open和Close,只有在用DataAdapter的时候才不需要
      

  4.   

    1 就算懂了吧
    2 我以前用ExecuteNonQuery() 都是
    conn.open conn.close
    和这个comm.cennection.open close是一回事吗???
      

  5.   

    String deleteCmd = "DELETE from aa where id = @Id";
    如果不用下面的命令声明的话,无法识别参数@Id
    myCommand.Parameters.Add(new OleDbParameter("@Id", OleDbType.Char, 11));myCommand.Parameters["@Id"].Value = MyList.DataKeys[(int)e.Item.ItemIndex];
    个人认为MyList应该才是你的DataGrid的Name,用它的DataKeys属性来以选中的GataGridItem的索引作为关键字以与数据库记录匹配,并据此删除记录open与close在这种情况下可以省略,如果数据库连接没有打开,则打开