OleDbDataAdapter MyDa=new OleDbDataAdapter (SqlString,MyConn);
OleDbCommandBuilder cb = new OleDbCommandBuilder(MyDa);
......if it still does not work, write outcb.GetInsertCommand().CommandTextand try to run it manually

解决方案 »

  1.   

    楼上的老大,还是不行,我是第一次用DATASET,以前用的是COMMAND。
    我把源码整理一下,应该是这样:
    string MyConnString="Provider=Microsoft.Jet.OleDb.4.0.;Data Source=F:\\TestDS.mdb";
    OleDbConnection MyConn=new OleDbConnection (MyConnString);
    MyConn.Open ();
    string SqlString="Select MyName,MyAge,MySex from MyCon";OleDbDataAdapter MyDa=new OleDbDataAdapter (SqlString,MyConn);DataSet MyDs=new DataSet ();MyDa.Fill(MyDs,"MyCon");DataRow MyDr=MyDs.Tables ["MyCon"].NewRow ();
    MyDr["MyName"]="奇怪哦!";
    MyDr["MyAge"]="24Y";
    MyDr["MySex"]="男";
                
    MyDs.Tables["MyCon"].Rows.Add (MyDr);
    MyDs.Tables ["MyCon"].AcceptChanges ();
    MyDs.AcceptChanges ();
    MyDa.Update (MyDs,"MyCon");
               
    MyConn.Close ();运行可以,可是没法添加数据。
      

  2.   

    Never call AcceptChanges before Update.
    当AcceptChange被调用有,所有的改变的标记都消失了,update就认为没有数据被改变,就不向数据库提交数据了.而且你还缺少这样一句
    OleDbCommandBuilder MyCB = new OleDbCommandBuilder(MyDa);以下程序可以正确运行
    string MyConnString="Provider=Microsoft.Jet.OleDb.4.0.;Data Source=F:\\TestDS.mdb";


    OleDbConnection MyConn=new OleDbConnection (MyConnString);
    MyConn.Open ();            
    string SqlString="Select MyName,MyAge,MySex from MyCon"; OleDbDataAdapter MyDa=new OleDbDataAdapter (SqlString,MyConn);
    DataSet MyDs=new DataSet (); OleDbCommandBuilder MyCB = new OleDbCommandBuilder(MyDa);
    MyDa.Fill(MyDs,"MyCon");
    DataRow MyDr;
    MyDr=MyDs.Tables["MyCon"].NewRow ();
    MyDr["MyName"]="奇怪哦!";
    MyDr["MyAge"]="24Y";
    MyDr["MySex"]="男";            
    MyDs.Tables[0].Rows.Add (MyDr);
    MyDa.Update (MyDs,"MyCon");
                MyDs.AcceptChanges ();
    MyConn.Close ();
      

  3.   

    楼上的老大:
    OleDbCommandBuilder MyCB = new OleDbCommandBuilder(MyDa);这一句有什么用??而且在程序的后段都没有用到MyCb??
      

  4.   

    此外:
    我就是在MSDN里看到这么一句话,就是在Add()之后,调用相应的表的AcceptChanges()。所以,我就先用AcceptChanges。还有,先用AcceptChanges(),数据提交到什么地方去了??
      

  5.   

    AcceptChanges()不向数据库提交任何数据。DataRow有几种状态:unchanged,modified,add,delete ...,用来表示自上次AcceptChanges()后数据的变动状况,调用AcceptChanges()只是将DataTable中所有的DataRow状态设为Unchanged。你调用OleDbDataAdaper的Update()方法时,内部的运行机制是这样的:检查数据源的每一行DataRow,如果状态不为unchanged,则调用相应的Command,比如:某DataRow的状态为add,那么OleDbDataAdaper就会调用InsertCommand.CommandText属性里的SQL语句,OleDbCommandBuilder MyCB = new OleDbCommandBuilder(MyDa)这一句的目的是自动生成相应的InsertCommand,deleteCommand和updateCommand。