可以直接使用DataAdapter.Update但要先把DataAdapter.SelectCommand,InsertCommand,DeleteCommand设置好.///////我在用DataAdapter.Update的时候直接就用了,我并没有设置SelectCommand,InsertCommand这些啊?如果设置改是怎么设置的呢?

解决方案 »

  1.   

    对于DataAdapter,如果要执行insert/delete/update/select操作,都要设置其相应的Command对象,实际上也就是设置其SQL语句及参数,然后再由DataAdapter执行相应操作.
      

  2.   

    我在用DataAdapter.Update的时候直接就用了,我并没有设置SelectCommand,InsertCommand这些啊?如果设置改是怎么设置的呢?
    -=========================
    SqlDataAdapter catDA = new SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", nwindConn);       catDA.UpdateCommand = new SqlCommand("UPDATE Categories SET CategoryName = @CategoryName " +
                                         "WHERE CategoryID = @CategoryID" , nwindConn);catDA.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");SqlParameter workParm = catDA.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int);
    workParm.SourceColumn = "CategoryID";
    workParm.SourceVersion = DataRowVersion.Original;DataSet catDS = new DataSet();
    catDA.Fill(catDS, "Categories");   DataRow cRow = catDS.Tables["Categories"].Rows[0];
    cRow["CategoryName"] = "New Category";catDA.Update(catDS);
      

  3.   

    用SqlCommandBuilder,它会自动生成相关语句.具体请看:
    两个方法任意选择一个即可:  public DataSetUpdateByDataSet(DataSet ds,string strTblName,string strConnection)
      {
          SqlConnection  conn = new SqlConnection(strConnection));
             
         SqlDataAdapter myAdapter = new SqlDataAdapter();
         SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);    
         myAdapter.SelectCommand = myCommand;
         SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);     
      try      {                 lock(this)            //处理并发情况(分布式情况)              {               myAdapter.Update(ds,strTblName);                }      }  
     
      catch(Exception err)
     {   conn.Close();   
       throw new BusinessException(err);
     }    return ds;    //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds}或public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
      {
       
      
          SqlConnection  conn = new SqlConnection(strConnection));         
          SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);          SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );         SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);     
          
          myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();      myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();     myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();   try  {        lock(this)                              //处理并发情况(分布式情况)       {              conn.Open();              myAdapter.Update(ds,strTblName);                conn.Close();       }
      
             return ds;    //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds }
     catch(Exception err)
     {       conn.Close(); 
          throw new BusinessException(err);
     }
    }
    具体请看原Blog:
    http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
      

  4.   

    楼主怎么把我回复别人的话搬出来了, 呵呵.楼上几位回答的都很详细,另外在用.NET2003新建 [数据窗体向导],可以查看更为详细的代码.