System.Data.OleDb.OleDbConnection dbConnection=new System.Data.OleDb.OleDbConnection(sonstr); string QueryStr="select * from bsq_entry_head where Entry_no='"+TextBox1.Text+"'"; System.Data.OleDb.OleDbCommand dbCommand = new System.Data.OleDb.OleDbCommand();
dbCommand.CommandText=QueryStr;
dbCommand.Connection = dbConnection; System.Data.OleDb.OleDbDataAdapter dataAdapter= new System.Data.OleDb.OleDbDataAdapter();
dataAdapter.SelectCommand = dbCommand;
System.Data.OleDb.OleDbCommandBuilder commandBuilder=new System.Data.OleDb.OleDbCommandBuilder(dataAdapter);
dataAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
dataAdapter.InsertCommand=commandBuilder.GetInsertCommand();
dataAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
//。。中间修改表格部分省略,表格没有改错应该,就是下面这句入库的语句感觉就像没执行,也不报错。怎么回事????
dataAdapter.Update(dataset_head.Tables[0]);

解决方案 »

  1.   

    参考
    http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/data/datagrid4.src
      

  2.   

    dataset_head.Tables[0]没有数据被更改吧?
      

  3.   

    if (dataset_head.HasChanges())//dataAdapter.Update....
      

  4.   

    dataAdapter.AcceptChanges();
    dataAdapter.Update(dataset_head.Tables[0]);改成上述代码试试看
      

  5.   

    首先确认你的数据表修改过,
    其次,
    dataAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
    dataAdapter.InsertCommand=commandBuilder.GetInsertCommand();
    dataAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
    这3句不需要
      

  6.   

    dataAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
    dataAdapter.InsertCommand=commandBuilder.GetInsertCommand();
    dataAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
    去掉试了没有
      

  7.   

    可注释以下语句,因为new OleDbCommandBuilder(dataAdapter);时已生成:
    dataAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
    dataAdapter.InsertCommand=commandBuilder.GetInsertCommand();
    dataAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
      

  8.   

    那三句去掉还是不行,数据表肯定有更改
    我放了一个DataGrid测试,写了一个DataGrid2.DataSource=dataset_head;DataGrid2.DataBind();都能看见我家的数据,但就是不会更新到数据库里,怎么回事啊
      

  9.   

    楼主在Update之前 加一句dataAdapter.TableMappings.Add("bsq_entry", ataset_head.Tables[0].TableName);再试试
      

  10.   

    还是一样不行!见鬼了,难道commandBuilder自动生成的语句会不行?
      

  11.   

    你获取数据的DataAdapter和执行Update操作的DataAdapter是同一个吗?
    或者,如果你使用ASP.NET的话,是不是PostBack后,又重新填充了数据?
      

  12.   

    更新之前先验证下dataset_head.Tables[0]中被修改行的行状态是否为Modified,如果行状态都没有了,那是肯定更新不了的。SqlDataAdapter是通过行状态来更新数据的。参考:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDataRowClassRowStateTopic.htm
      

  13.   

    你看看你的窗体设计代码有没有问题,比如说提交的时候是不是激发了 这个函数呢 ?我也经常碰到这中问题,没有修改它上面的代码,结果没有反映,后来把那句this.*.Click+=.....加上就好了
      

  14.   

    术独朱,说的有道理,,,
    有了
    dataAdapter.SelectCommand = dbCommand;
    下面的语句没有必要了,,会自动生成。。
    dataAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
    dataAdapter.InsertCommand=commandBuilder.GetInsertCommand();
    dataAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
    在插入或更新,删除前,,最好判断数据行的状态,,过滤出发生以上变化行,,再用update语句,,if(ds.HasChanges(DataRowState.Added))
    {
    DataSet xds;
    xds=dataset_head.GetChanges(DataRowState.Added);//数据行状态,,
    dataAdapter.Update(dataset_head.Tables[0]);
    }
    记住在更新数据库时,必须指明更新表的主键,,可以在SqlDataAdapter后面指定,fill时把表结构,及主键值也拷贝进datatable中,这样更新数据库时
    才能成功。。