新手问题:
Access数据表里有180个字段,在Form中对其修改时,我用dbConn=new OleDbConnection(connectstr);
OleDbCommand command = dbConn.CreateCommand();
command.CommandText = name;
command.CommandType = CommandType.TableDirect;
dbAdapter = new OleDbDataAdapter(command);
OleDbCommandBuilder cb=new OleDbCommandBuilder(dbAdapter);
dbAdapter.Update(dataset);对修改后的dataset进行更新,出现错误:System.Data.OleDb.OleDbException: 查询过于复杂。
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
   at System.Data.Common.DbDataAdapter.Update(DataSet dataSet)
   at Common.DataBaseOperator.BackUpdate(DataSet ds, String name) in e:\Irwin\common\databaseoperator.cs:line 234
未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 common.dll 中。
sets 错误: 标识符“sets”超出范围如何解决呢?Update对个数有限定吗?
谢谢!

解决方案 »

  1.   

    你把你的SQL语句发上来看下。。
      

  2.   

    我先用
    dbConn=new OleDbConnection(connectstr);
    OleDbCommand command=dbConn.CreateCommand();
    command.CommandText=name;
    command.CommandType=CommandType.TableDirect;
    dbAdapter = new OleDbDataAdapter(command);
    OleDbCommandBuilder cb=new OleDbCommandBuilder(dbAdapter);
    ds=new DataSet();
    dbAdapter.Fill(ds);
    return ds;
    得到dataset ds,然后对ds中row[""]进行修改,然后返回ds,进行updata,没有用到显示sql
      

  3.   

    用这种方法我本身不需要写任何sql语句的,程序会自动生成响应的sql语句,我用这种方法对
    字段比较少的表进行增,删,改的时候还好使,表字段一多就不好使了,小弟是菜鸟,刚到门口
    ,希望哪位牛人能帮我解决下这个问题,不胜感激!!!
      

  4.   

    能不能把完整点的代码都贴出来啊....包括对ds.rows的修改的代码....
      

  5.   

    多谢关注!!!
    首先,我得到数据表的记录(就一条)DataSet ds=GetInformation();GetInformation方法如下:dbConn=new OleDbConnection(connectstr);
    OleDbCommand command=dbConn.CreateCommand();
    command.CommandText=name;
    command.CommandType=CommandType.TableDirect;
    dbAdapter = new OleDbDataAdapter(command);
    OleDbCommandBuilder cb=new OleDbCommandBuilder(dbAdapter);
    ds=new DataSet();
    dbAdapter.Fill(ds);
    return ds;然后对得到的ds修改:foreach(System.Data.DataRow row in ds.Tables["Table"].Rows)
    {
        row["编码"]=this.tbReportCode.Text.Trim(); //是从textBox的输入录入
        row["名称"]=this.tbReportName.Text.Trim(); //诸如此类的赋值
        ……
    }然后更新ds:BackUpdata(ds)BackUpdata方法:dbConn=new OleDbConnection(connectstr);
    OleDbCommand command = dbConn.CreateCommand();
    command.CommandText = name;
    command.CommandType = CommandType.TableDirect;
    dbAdapter = new OleDbDataAdapter(command);
    OleDbCommandBuilder cb=new OleDbCommandBuilder(dbAdapter);
    dbAdapter.Update(ds);在执行到dbAdapter.Update(ds)时出现前面说的问题
    我用相同的过程对字段少的进行修改,通过
    希望能帮帮小弟!!!
        
        
      

  6.   

    我按照你的做法做了一下,与你的区别就是字段数少了点,我的测试是可以成功的....我想原因可能真如你所说,字段数太多,因为异常不也是提示说"标识符“sets”超出范围"吗...这个在以前我也没有碰到过,或许真的是对字段个数有限制吧...
      

  7.   

    你这样测试一下,写个Sql语句,就往你的数据库里插入一条数据看看...很长,有时间可以试试...看能否插得进去....
      

  8.   

    刚查了下,Acess支持的字段是225个,但至于查询,或者更新能够支持多少,这个我没有查到,这样吧..你换其他数据库试试,比如Oracle,或者SqlServer...因为你用简单的例子试过可以,而我也帮你试过,也是可行的,现在应该可以推断出是字段数限制的问题....
      

  9.   

    给分!!!!
    谢谢了,看来只能用sql修改了!
      

  10.   

    不过希望你能帮忙留意一下,能不能找个方法把那个sets属性给放大,因为我必须用Access,就是不想用sql修改才用这种updata,因为要修改的不只这一个表,还有很多类似的20多个表,每个都用sql,那……呵呵,不管怎么说,多谢啦