举个例子如下:有一个dataset中含有一个datatable对象,该datatable对应数据库中的一个表,
datatable对象中存在一些行,有新行,已修改了的行,删除的行,如何用UpdateCommand,InsertCommand,DeleteCommand来将修改了的数据写回到数据库。并且做成事务型的
具体如下:
数据库表 ceiproggroup含有id(自动生成列),name//修改的页面update.aspx,当然我只是简单举例,实际程序比这复杂
SqlConnection conn=new SqlConnection("server=localhost;uid=sa;pwd=sscyy;database=pwd");
SqlDataAdapter catDA = new SqlDataAdapter("select id,name from ceiproggroup ", conn);       

DataSet catDS = new DataSet();
catDA.Fill(catDS, "ceiproggroup");foreach(DataRow myrow in catDS.Tables["ceiproggroup"].Rows){
if (myrow[1].ToString()=="eeee") myrow["name"]="fffff";
if (myrow[0].ToString()=="uuuu") myrow.Delete();
}

DataRow dr=catDS.Tables["ceiproggroup"].NewRow();
dr["name"]="uuuu";
catDS.Tables["ceiproggroup"].Rows.Add(dr);dr=catDS.Tables["ceiproggroup"].NewRow();
dr["name"]="eeee";
catDS.Tables["ceiproggroup"].Rows.Add(dr);

Session["ceiproggroup"]=catDS.Tables["ceiproggroup"];//将修改写回到数据库updateresult.aspx
SqlConnection conn=new SqlConnection("server=localhost;uid=sa;pwd=sscyy;database=pwd");
SqlDataAdapter catDA = new SqlDataAdapter("select id,name from ceiproggroup", conn);       

DataSet catDS = new DataSet();
catDA.Fill(catDS, "ceiproggroup");   
catDS.Tables["ceiproggroup"].Rows.Clear();

catDS.Merge((DataTable)Session["ceiproggroup"]);
catDA.UpdateCommand = new SqlCommand("UPDATE ceiproggroup SET name = @name " +
                                     "WHERE id = @id" , conn);
catDA.UpdateCommand.Parameters.Add("@name", SqlDbType.NVarChar, 50, "name");
SqlParameter workParm = catDA.UpdateCommand.Parameters.Add("@id", SqlDbType.Int);
workParm.SourceColumn = "id";
workParm.SourceVersion = DataRowVersion.Original;

catDA.InsertCommand=????怎么写
catDA.DeleteCommand=????怎么写catDA.Update(catDS,"ceiproggroup");

解决方案 »

  1.   

    string sql="insert into " + tablename + " values (" + txt1.Text + ",'" + txt2.Text + "','" + txt3.Text + "')";string sql = "DELETE from "+ tablename+" where modelid = " + str;
      

  2.   

    SqlTransaction myTran=conn.BeginTransaction 
    try{
    ...
    catDA.UpdateCommand.Transaction =myTran;
    catDA.InsertCommand.Transaction =myTran;
    catDA.DeleteCommand.Transaction =myTran;...catDA.Update(catDS,"ceiproggroup");
    myTran.commit();
    }catch
    {
    myTran.rollback();
    }
      

  3.   

    就是要把添加、修改、删除的数据提交回数据库
    就用SqlCommandBuilder来做呀!
    它能够批量提交修改的dataset的数据到数据库
    不毕这么麻烦
      

  4.   

    catDA.InsertCommand = new SqlCommand("Insert into ceiproggroup (name ) values(@name )" , conn);
    catDA.InsertCommand .Parameters.Add("@name", SqlDbType.NVarChar, 50, "name");
    catDA.DeleteCommand = new SqlCommand("delete from ceiproggroup where id=@id", conn);
    catDA.DeleteCommand .Parameters.Parameters.Add("@id", SqlDbType.Int,"ID");
      

  5.   

    当涉及单个表时可以利用SqlCommandBuilder,我想看看涉及不止一个表怎么做