DataTable dt=this.GetTable();//这是我自己写的一个涵数,返回一个DATATABLE
SqlConnection sqlcon=new SqlConnection(sqlconstr);
sqlcon.Open(); String sqlstr="select part_no,part_owner,part_nationality,part_id,shared,transaction_no from part_owner where transaction_no=" + "'" + "-448145" + "'";
DataTable dt2 = new DataTable();
SqlDataAdapter da=new SqlDataAdapter(sqlstr,sqlcon);             
DataSet ds=new DataSet();

SqlCommandBuilder cb;        
cb=new SqlCommandBuilder(da); //使用关联的 SqlDataAdapter 对象初始化 SqlCommandBuilder 类的新实例
da.Fill(dt2);
dt2.Clear();
dt2 =dt;
da.Update(dt2);

解决方案 »

  1.   

    使用CommandBuilder有几个限制:
    1只能在单个表中进行操作
    2制定给DataAdapter对象的SelectCommand属性的SQL语句必须要返回一个包含唯一识别返回记录的值的列
    3如果selectcommand属性变化了,必须调用DataAdapter对象的RefreshSchema()方法来更新数据
      

  2.   

    dataAdapter.Update()方法实际上是这样操作的:
    当调用DataTable.Rows.Add, DataTable.Rows.Insert , Delete 等方法或者更改DataRow里面的字段的值的时候自动的记录行的状态(只读属性RowState),update的时候就是遍历这些发生更改的行,自动生成sql命令运行;dt2.Clear() 清空了DataTable 对象,不是上面的操作,所以无效;
    换成for(int i=0;i<dt2.Rows.Count;i++)
            dt2.Rows[i].Delete();