晕死,搞了一天也没明白是什么问题。dtMain.Rows.Add(drMain);
OleDbCommandBuilder cbMain;
cbMain = new OleDbCommandBuilder(daMain);
daMain.UpdateCommand = cbMain.GetInsertCommand();
daMain.Update(dsMain, "outgo");
dsMain.AcceptChanges();在C#中使用ado.net,表格outgo中有一个自动编号的列为主键,
修改和删除都没有问题,可是在添加新记录的时候总是提示
“insert into语句的语法错误”,在操作别的表格有文本列
为主键时用相同的这一系列操作却没问题,到底是怎么搞的?
把这个表中的主键改为文本以后还是出同样的问题,但是这些
语句在别的窗体中却可以正常运行。我看了生成的语句是 insert into outgo (x,x,x,x...) values (?,?,?,?...)
这里边没有自动编号那一项,查MSDN,查了半天给那个例子试了一下好象也没什么用
这个东西我感觉还不如vb6的时候那个ado控件好用

解决方案 »

  1.   

    我在给添加的数据行drMain赋值的时候没有对ID这个字段赋值,
    这个插入语句是command bulider生成的,
    应该怎么做?
    drMain["id"] = ?
      

  2.   

    在执行过程中输出实际执行的SQL,拿到查询分析器里分析一下如果分析不出原因,就拷到这儿来,别写大概的
      

  3.   

    好吧,查询分析器没用过呢还,靠啊
    是不是vs.net里边的东东?
      

  4.   

    呵呵,查询分析器是SQL Server的东西,看来你是用的Access,Access里也有相应的分析语法的吧?反正把最终执行的SQL语句给弄出来
      

  5.   

    Access数据库里类似Memo这样的字段得加方括号[Memo]
      

  6.   

    try
    {
    drMain = dtMain.NewRow();
    drMain.BeginEdit();
    drMain["date"] = dtpDate.Value;
    drMain["category"] = cmbCategory.Text;
    drMain["detail"] = cmbDetail.Text;
    drMain["price"] = Convert.ToSingle(txtPrice.Text);
    drMain["amount"] = Convert.ToSingle(txtAmount.Text);
    drMain["money"] = Convert.ToSingle(txtMoney.Text);
    drMain["name"] = cmbName.Text;
    drMain["comment"] = txtComment.Text;
    drMain.EndEdit(); dtMain.Rows.Add(drMain);
    OleDbCommandBuilder cbMain;
    cbMain = new OleDbCommandBuilder(daMain);
    daMain.UpdateCommand = cbMain.GetInsertCommand();
    daMain.Update(dsMain, "outgo");
    dsMain.AcceptChanges();
    }

    查得生成的插入语句为:
    "INSERT INTO outgo( date , category , detail , price , amount , money , name , comment ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )"
    其中outgo表格中第一列为 “id”,值为”自动编号”.数据库为access.
      

  7.   

    把 date money name 等等改为   [date],[money],[name]试试
      

  8.   

    这个插入语句是用commandbulider自动生成的啊,大概生成的语句不可靠,
    我试试自己写看行不行吧
      

  9.   

    还是搞不定,真头疼
    死活就是出错,哪怕把自动编号字段删除,另外设一个主键也不行
    真TMD怪事
      

  10.   

    我把那个自动编号的字段改为文本(主键),
    然后给这个字段赋值,结果还是不行,难到是.net的bug?
    同样一段程序,在别的窗体中操作别的表格一点问题也没有,奇怪
      

  11.   

    不会是.net的bug 耐心检查下
      

  12.   

    跟自动编号的字段没有关系,不必修改。
    把outgo( date , category , detail , price , amount , money , name , comment )
    改为
      outgo( D_date , category , detail , price , amount , D_money , name , comment )