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把数据更新到数据库,请各位大侠帮一下忙.
{
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把数据更新到数据库,请各位大侠帮一下忙.
然后对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);
我要的结果是,不用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);
你的方法一次只能删除或者更改一条数据,我想的是如果能更改DataSet中很多的数据,然后一次将数据写入到数据库,这样可以避免每更改一条数据都连接一次数据库,我的想法能实现吗,我也不知道我的要求是不是合理的,请各位大侠给我点意见,谢谢!!
to: stswordman(糕)
你的方法一次只能删除或者更改一条数据,我想的是如果能更改DataSet中很多的数据,
可以啊,你想删除多少就删除多少啊
ds.Tables[0].Rows[0].Delete();
调用几次就删除几个啊
{
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;
}