一个是对DataTable操作,一个是对DataBase操作,这是两个不同的东西呀,能不能在详细讲讲。

解决方案 »

  1.   

    取得prodDataSet的sql语句是什么?
    是不是有一个自增长的ID字段
      

  2.   

    System.Data.DataColumn[] pKeyCol = new System.Data.DataColumn[1];
    pKeyCol[0] = this.prodDataSet.FX_PRODINFO.Columns["id"] ;
    pKeyCol[0].AutoIncrement=true;
    pKeyCol[0].AutoIncrementSeed =1;
    pKeyCol[0].AutoIncrementStep =1; this.prodDataSet.FX_PRODINFO.PrimaryKey = pKeyCol ;

      

  3.   

    to songzx66prodDataSet的通过一个dataadapter得到的。
    dataadapter的select语句是:SELECT ID, PRODID, PRODNAME, OUTPRI, INPRI, LEI, DELOK, GHSNAME, CITYID FROM FX_PRODINFO
    自动生成了三个语句insert,update,deleteid是自增长.所以在insert中不用写ID也会在数据库中自动生成新id
      

  4.   

    to  desrie(leir) 
    我的字段(id)是已经在数据库中用序列和插入前的触发器得到,并不需要在程序中赋值,
    请问您的这几句话真的有必要么?谢谢你的帮助
      

  5.   

    兄弟,直接用SQL语句更加简单。
    使用一个COMMAND去执行一个INSERT语句,很简单。
      

  6.   

    to  zjlion(晴海) 
      对,在表中有一个名称为ID的自增长的主关键字
      

  7.   

    我觉得问题就出在SqlCommand上。
     楼主你看,你的第二种方法是自定义了一条insertCommand,那么运行后实际上直接对数据库操作--增加了一行记录;
      第一种方法的报错其实有误导,不是“ID”为空,而是你的Rows.Add()语句没有生效。
      你可以在第一种方法里也加上SqlCommand语句,最后Add成功后记住要Update()  拙见,请指点
      

  8.   

    执行prodDataSet.FX_PRODINFO.Rows.Add(rowNew) 是对DprodDataSet(DataSet)里的FX_PRODINFO(DataTable)添加数据,而不是对实际的数据库进行添加,不会触发数据库里的触发器。
    可以给id列赋一个值,在这个DataTable里保持唯一,实际插入数据库以后再取出这一行数据,就获得了实际插入到数据库里保存的id值。
      

  9.   

    在adapter中调用fill方法前,使用FillSchema填充表结构,试试
      

  10.   

    我是菜鸟,没怎么用过.net,不过猜想是不是在这一句时出的问题,
    DataRow rowNew =prodDataSet.FX_PRODINFO.NewRow();
    试试改写成
    DataRow rowNew =prodDataSet.FX_PRODINFO.NewRow("you new row ID");
    怎么样
    :-P
    汗++++
      

  11.   

    哦,我试了一下,大概你的主关键字"ID"在DataSet中没有设成自增长的.如果设成自增长的,就不需要在赋值了.
    设成自增长:
    prodDataSet.FX_PRODINFO["ID"].AutoIncrement = true;
    试试看.....
      

  12.   

    为什么要用DataSet ? 为什么不直接操作数据库 ? Search in Help , plz.
      

  13.   

    不好意思...刚才那条语句写错了..
    应该是:
    prodDataSet.FX_PRODINFO.Columns["ID"].AutoIncrement = true;