自己根据需要写Update语句,赋值给DataAdapter的UpdateCommand属性就可以了.

解决方案 »

  1.   

    回复人: haiwangstar(八月桂花香) ( ) 信誉:100  2004-01-20 00:12:00  得分:0 
    自己根据需要写Update语句,赋值给DataAdapter的UpdateCommand属性就可以了.
    是这样的,vb下我做过一个,不过比较麻烦,要手工判断primary key等。
      

  2.   

    更新前根据动态DataSet里相应DataTable各行各字段的OldValue/NewValue来生成Update语句,创建一个OleDbCommand来执行它。
    或者创建一个DataAdapter,动态设置它的UpdateCommand、InsertCommand、DeleteCommand的Sql语句。
      

  3.   

    to wanggier:
    "动态设置它的UpdateCommand、InsertCommand、DeleteCommand的Sql语句。"动态设置语句的话必须动态配置各语句的参数值,这需要能够获得该数据表各字段的名称,不知有何简便方法。to All:
    我发现好像有OleDbCommandBuilder类根据给定的SelectCommand自动生成Update、Insert、Delete相关SQL命令,但是我这么做的话总是出错提示SelectCommand没有返回键列,可是我动态生成该表时明明设置了键列,我用一个静态表用同样方法一试却没有问题,估计因为动态表的数据集设置成了非类型化的缘故,而这其中没有键列(不知我估计的对不对),相关代码如下,希望大家给予意见:
    类声明部分代码:
    private System.Data.OleDb.OleDbCommandBuilder myBuilder;
    private System.Data.OleDb.OleDbDataAdapter myAdapter;
    private System.Data.DataSet dsWage;
    实例化部分代码(clsCommon.m_TableName为纪录动态表名的全局变量):
    dsWage = new System.Data.DataSet("dsWage");
    myAdapter = new System.Data.OleDb.OleDbDataAdapter("select * from " + clsCommon.m_TableName, this.oleDbConnection1);
    myBuilder = new System.Data.OleDb.OleDbCommandBuilder(myAdapter);
    执行部分代码:
    this.myAdapter.Fill(this.dsWage);
    this.dataGrid1.DataSource = this.dsWage.Tables[0];
    ……
    this.myAdapter.UpdateCommand = this.myBuilder.GetUpdateCommand();
    this.myAdapter.DeleteCommand = this.myBuilder.GetDeleteCommand();
    this.myAdapter.InsertCommand = this.myBuilder.GetInsertCommand();
    this.myAdapter.Update(this.dsWage);
    this.dsWage.AcceptChanges();
    ……