这种需求必须你自己写insert语句了,不能用dataAdapter,因为dataAdapter是根据dataSet里的Row是否被修改过来更新的。你这样新建的DataSet的Row,初始都停留在未修改的状态。

解决方案 »

  1.   

    1,你自己写INSERTCOMMAND语句
    2,用commandbuild
      

  2.   

    看了CSDN的帮助将代码改成这样,数据还是没有变化,也不报错,真是晕啊!
    代码如下:
    string db=Application.StartupPath+"\\database.mdb";
    string ls_conn =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+db;
    OleDbConnection conn = new OleDbConnection (ls_conn);
    int li_update=0;
    DataSet sds=new DataSet();
    try
    {
    OleDbDataAdapter adapter;
        
    conn.Open();     OleDbCommand cmd=new OleDbCommand();
    adapter=new OleDbDataAdapter();
    adapter.SelectCommand=new OleDbCommand ("",conn);

    cmd.CommandText="select * from Ciq_In_Apl";
    cmd.Connection = conn;
    adapter.SelectCommand = cmd; adapter.Fill(sds,"Table1");
    sds.ReadXml("myXmlDoc.xml",System.Data.XmlReadMode.ReadSchema);
    sds.Merge(sds);
    adapter.Update(sds,"Table1");
    sds.AcceptChanges();
    if(li_update >= 0)
    {
    //info="成功";
    return true;

    }
    else
    {
    return false;
    }
      

  3.   

    这样的代码不对数据库的数据更新是预期的效果,为什么要报错?只要当你修改了一个DataSet的值之后,才可以用DataAdapter来更新。你这样的情况只能自己手动更新DataSet的内容到数据库。
      

  4.   

    问题不是你的代码,你的代码,是问题的.
    是你的xml文件,不是dataSet的ReadSchema格式.所以在merge时不能得到row的rowstate.

    m_DataLayer.DsTasks.GetChanges().WriteXml("c:/a.xml", XmlWriteMode.DiffGram);m_DataLayer.DsTasks.ReadXml("c:/a.xml", XmlReadMode.DiffGram);然后你可以用,ds.merge