数据适配器 DataAdapter.
没有 数据适配器,无法进行修改操作.

解决方案 »

  1.   

    我用的就是DataAdapter,以下是我保存时用的代码,烦请看看!
    public bool UpdateByDT(string asSql,DataTable adt)
    {
    bool bRtn = true; myConn = new OleDbConnection(_ConnStr); try
    {
    OleDbDataAdapter myoleadp  = new OleDbDataAdapter();
    myoleadp.SelectCommand = new OleDbCommand(asSql,myConn);
    OleDbCommandBuilder myCmdBuilder = new OleDbCommandBuilder(myoleadp);
    myConn.Open();
    myoleadp.Update(adt);
    }
    catch(Exception err)
    {
    this._LastError = err.Message.ToString();
    bRtn = false;
    }
    finally
    {
    myConn.Close();
    }
    return bRtn;
      

  2.   

    你没有updatecommand语句啊:
    http://expert.csdn.net/Expert/topic/1970/1970326.xml?temp=.2618067
    http://expert.csdn.net/Expert/topic/1967/1967888.xml?temp=.2565271
      

  3.   

    myoleadp.SelectCommand = new OleDbCommand(asSql,myConn);
    可能是这句话有题分开执行一下,确保数据在此进行了填充。
      

  4.   

    我认为是SQL语句的问题,你可以把他输出出来,是不是有问题,或为空?
      

  5.   

    SQL语句没问题。SQL语句为:
    select * from fg_basedata  where c_code='00000000000000000011'adt.Rows[0].RowState 为Modified
    adt.Rows[0].ItemArray.Length 为14而且我也查了数据已经是修改过后的数据.
      

  6.   

    如何补啊?我在使用myCmdBuilder.GetUpdateCommand()进行跟踪时就已经有这个问题了。
      

  7.   

    自动生成SQL语句的OleDbCommandBuilder有很多限制,比如说你用selectcommand取出来的表只能是一个数据库里完整的表,而且表一定要有主键,等等,所以最好不要用这个自动华的东东,太容易出错,而且效益低。
    你的这个错误在于:
    select * from fg_basedata  where c_code='00000000000000000011'
    返回来的表根本就没有主键,除非你来个
    select * from fg_basedata 
    试试
    结帐
      

  8.   

    不对啊,SQL语句为:
    select * from fg_basedata where 1=0;
    时,新增记录是成功的,这是为什么?
      

  9.   

    而且我只是要更新当c_code='00000000000000000011'时的这条数据啊。
      

  10.   

    一句话,你如果想更新c_code='00000000000000000011'时的这条数据的时候,就不能用OleDbCommandBuilder ,因为这个查询语句返回来的表根本就没有主键,所以出错,
    你自己写个SQL啊,快多了,不要太依赖什么自动生成了,那是要是效益做代价的
    你的表的主键是什么,是1,还是c_code?如果是c_code的话,那当然返回来的表就没有主键了,表中行c_code的值都是一样的啊,你研究一下吧
      

  11.   

    自己已经解决,换成用微软的OLEDB for Oracle就行了。