语句:
OleDbCommandBuilder thisComm = new OleDbCommandBuilder( thisAdapter );
只是简单的根据thisAdapter的SelectCommand生成了UpdateCommand、DeleteCommand、InsertCommand,并没有连接到thisAdapter,所以当你调用:
thisAdapter.Update( thisDataSet.Tables[0] );
的时候,什么都不会发生。解决:thisAdapter.UpdateCommand=thisComm.GetUpdateCommand();
thisAdapter.DeleteCommand=thisComm.GetDeleteCommand();
thisAdapter.InsertCommand=thisComm.GetUpdateCommand();上面代码中可能调用方法或属性有误,编译时纠正。

解决方案 »

  1.   

    我刚找到解决方法,为了给初学的朋友方便,本人给出以下实例.也谢谢热心助人的大侠
    // string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\datalib.mdb;Mode=Share Deny None";
    // string strComm = "select * from [user]";
    // DataSet thisDataSet = new DataSet();
    // OleDbConnection thisConn = new OleDbConnection( strConn );
    // OleDbDataAdapter thisAdapter = new OleDbDataAdapter( strComm, thisConn);
    // OleDbCommandBuilder thisComm = new OleDbCommandBuilder( thisAdapter );
    // //select
    // OleDbCommand sComm = new OleDbCommand("select * from [user]",thisConn );
    // thisAdapter.SelectCommand = sComm;
    // //insert
    // sComm = new OleDbCommand("insert into [user] (ID,name) values (@ID,@name)",thisConn);
    // sComm.Parameters.Add("@ID",OleDbType.Integer,5,"ID" );
    // sComm.Parameters.Add("@name",OleDbType.VarChar, 15,"name");
    // thisAdapter.InsertCommand = sComm;
    //
    // //update
    // sComm = new OleDbCommand("update [user] set name = @name",thisConn);
    // sComm.Parameters.Add( "@name",OleDbType.VarChar,15,"name");
    // thisAdapter.UpdateCommand = sComm;
    //
    //
    //
    //
    //
    // try
    // {
    // thisConn.Open();
    // thisAdapter.Fill( thisDataSet,"user" );
    // this.dataGrid1.DataSource = thisDataSet.Tables[0];
    //// DataRow thisRow = thisDataSet.Tables["user"].NewRow();
    //// thisRow["ID"] = 19;
    //// thisRow["name"] = "fqang";
    //// thisDataSet.Tables[0].Rows.Add(thisRow);
    //
    //
    //
    // thisAdapter.Update( thisDataSet.Tables[0] );
    //
    //
    //
    //
    // }
    // catch ( Exception ee )
    // {
    // MessageBox.Show(ee.ToString());
    // }
    //
    // thisConn.Close();
      

  2.   

    楼主的这个方法是可行的方法。通过CommandBuilder来生成InsertCommand等Command的好处是简单,不会有问题,缺点是生成过程中要额外跟数据库交互一次。因此,高效的方法都是手工生成(就象我们宁愿手工生成CONNECTION也不使用编辑控件一样),但如果手工生成其他COMMAND的一个问题是字段的把握上,如果字段简单则什么问题都没有,如果复杂,特别还包含WHERE、SORT等子句时,编写SQL代码可是件很辛苦的工作。