private void button1_Click(object sender, System.EventArgs e)
{
SqlConnection myCon = DB.createCon();
string strSQL = "select uid,pwd from test";
SqlDataAdapter sda = new SqlDataAdapter(strSQL,myCon);
DataSet ds = new DataSet();
sda.Fill(ds,"test");
ds.Tables["test"].Rows[0].Delete() ;
try
{
sda.Update(ds.Tables["test"].GetChanges());
ds.AcceptChanges();
}
catch
{
MessageBox.Show("failed");
}
}
我想删除的一条记录,以上操作问什么不行?
我不想用SqlCommand我想从DataSet把数据更新到数据库,请各位大侠帮一下忙.

解决方案 »

  1.   

    要为DataAdapter分配一个DelCommand对象,并设置删除语句和参数,
    然后对DataSet对象进行操作,然后执行DataAdapter.Update(DataSet)操作,
    这样DataSet中的被标记为Deleted的行就会从数据库中删除
    下面是一个示例:
    1 创建数据库
    use northwindcreate table table1
    (
      id int identity(1,1) primary key,
      col1 nvarchar(100)
    )go insert into table1 (col1)values('a')
    insert into table1 (col1)values('b')
    insert into table1 (col1)values('c')
    insert into table1 (col1)values('d')2 删除操作SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=lancer;database=northwind");
    SqlCommand cmd=con.CreateCommand();
    cmd.CommandText="select * from table1";
    SqlDataAdapter da=new SqlDataAdapter(cmd);
    DataSet ds=new DataSet();
    da.Fill(ds);

    SqlCommand delCommand=con.CreateCommand();
    delCommand.CommandText="delete from table1 where id=@id"; SqlParameter p=new SqlParameter();
    p.ParameterName="@id";
    p.SourceColumn="id";
    p.DbType=DbType.String;
    delCommand.Parameters.Add(p); da.DeleteCommand=delCommand;
    da.Update(ds);
      

  2.   

    谢谢楼上的,
    我要的结果是,不用SqlCommand去删除记录,而是先更改DataSet中的数据,然后通过SqlDataAdapter.UpDate()去更新数据库,请你再看看
      

  3.   

    to 我要的结果是,不用SqlCommand去删除记录,而是先更改DataSet中的数据,然后通过SqlDataAdapter.UpDate()去更新数据库,请你再看看,,
    使用DataAdapter.UpDate()进行操作数据库必须为它设置UpdateCommand,InsertCommand,DeleteCommand属性中的一个或者多个。不知道我是不是理解了你的意思,我想你是不想用SqlCommand.ExecNonQuery()语句吧?实际上代码中并没有这个语句啊
    刚才粘贴的时候漏了一个对DataSet中行进行删除的语句
    完整代码如下:
    SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=lancer;database=northwind");
    SqlCommand cmd=con.CreateCommand();
    cmd.CommandText="select * from table1";
    SqlDataAdapter da=new SqlDataAdapter(cmd);
    DataSet ds=new DataSet();
    da.Fill(ds);SqlCommand delCommand=con.CreateCommand();
    delCommand.CommandText="delete from table1 where id=@id";SqlParameter p=new SqlParameter();
    p.ParameterName="@id";
    p.SourceColumn="id";
    p.DbType=DbType.String;
    delCommand.Parameters.Add(p);ds.Tables[0].Rows[0].Delete();////这句刚才丢了,抱歉da.DeleteCommand=delCommand;
    da.Update(ds);
      

  4.   

    用SqlHelper算了直接执行ExcuteNoQuery算了,省事啊。
      

  5.   

    是的,对DataSet中的数据进行修改,然后一起更新到数据库,这是我的目的,请各位给点意见
      

  6.   

    to: stswordman(糕) 
    你的方法一次只能删除或者更改一条数据,我想的是如果能更改DataSet中很多的数据,然后一次将数据写入到数据库,这样可以避免每更改一条数据都连接一次数据库,我的想法能实现吗,我也不知道我的要求是不是合理的,请各位大侠给我点意见,谢谢!!
      

  7.   


    to: stswordman(糕)
    你的方法一次只能删除或者更改一条数据,我想的是如果能更改DataSet中很多的数据,
    可以啊,你想删除多少就删除多少啊
    ds.Tables[0].Rows[0].Delete();
    调用几次就删除几个啊
      

  8.   

    实际上首先要检验DataSet中的数据的状态,如果存在DataRowState为Deleted状态的行,就要生成相应的sql,进行删除。
      

  9.   

    http://msdn2.microsoft.com/zh-cn/library/system.data.common.dataadapter.update.aspx
      

  10.   

    因为数据记录是存在DataSet的Tables里面的,当然数据删除时,并没有直接删除,是对Tables里的DataRow的RowState属性里,为DataRowState.Deleted表示是删除过的。只需遍历一次记录,再生成一批删除SQL语句,再一次执行,就可以达到你的要求了。
      

  11.   

    public string DataEdit(System.Data.DataTable myTB)
    {
    cn.Open();
    SqlCommand cmdUpdate=CreateUpdateCommand();
    SqlCommand cmdInsert=CreateInsertCommand();
    SqlCommand cmdDelete=CreateDeleteCommand();
    DataViewRowState dvrs;
    dvrs=DataViewRowState.ModifiedCurrent|DataViewRowState.Added|DataViewRowState.Deleted;
    int myretu=0;
    string strSQL="";
    foreach(DataRow row in myTB.Select("","",dvrs))
    {
    switch(row.RowState)
    {
    case DataRowState.Modified:
    SubmitUpdate(row,ref strSQL);
    break;
    case DataRowState.Added:
    SubmitInsert(row,ref strSQL);
    break;
    case DataRowState.Deleted:
    SubmitDelete(row,ref strSQL);
    break;
    }
    }
    cn.Close();
    return  strSQL;
    }
      

  12.   

    to:daishengs(横舟摆渡)请您给出您的全部源代码,你的这些我编译通不过