数据库是ACCESS的,表中有6个字段,程序运行中有5个字段的值改变了,要求把这5个改变的值更新的数据库当中,我写了一下代码,程序正常执行之后数据库的值并没有更新。不解。谢谢各位SSDataSet.Controller.Rows[0]["ControlName"] = shebeiCmb.Text.ToString();
SSDataSet.Controller.Rows[0]["BeginId"] = KaiShiNumericUpDown1.Value.ToString();
SSDataSet.Controller.Rows[0]["EndId"] = JieShunuMericUpDown1.Value.ToString();
SSDataSet.Controller.Rows[0]["ComNo"] = DuanKouMaskedTextBox1.Text.ToString();
SSDataSet.Controller.Rows[0]["Baud"] = sulvCBox.Text.ToString();
SSDataSet.Controller.AcceptChanges();
    
controllerTableAdapter.Update(SSDataSet.Controller);

解决方案 »

  1.   

    补充:controllerTableAdapter和SSDataSet是用数据源向导生成的。
      

  2.   

    补充:controllerTableAdapter和SSDataSet是用数据源向导生成的。
      

  3.   

    SSDataSet.Controller.AcceptChanges();
           
    controllerTableAdapter.Update(SSDataSet.Controller);

    ---------------------------------------------------------
    把这两句反过来!变成:
    controllerTableAdapter.Update(SSDataSet.Controller);
    SSDataSet.Controller.AcceptChanges();
      

  4.   

    DataAdapter对象在Update时只会对行RowState为非Unchanged状态的行进行Update操作,提交后一般都会自动 AcceptChanges,LZ你已经AcceptChanges了,RowState都已经变为Unchanged,再调用Update方法自然不会就什么改动。
      

  5.   

    回复hudingwen :是数据库没有更新。回复GhostAdai :反过来程序报错了,如下:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
      

  6.   

    你的controllerTableAdapter对象是怎么生成的?有没有指定有效的select语句或SelectCommand对象?如果你想偷懒不写Update语句的话就用这个对象OleDbCommandBulider,在:
    controllerTableAdapter.Update(SSDataSet.Controller);
    SSDataSet.Controller.AcceptChanges();
    这两句之前加上这一句:OleDbCommandBuilder autoCmd = new OleDbCommandBuilder(controllerTableAdapter)
      

  7.   

    SSDataSet.Controller.AcceptChanges(); 
    这就使 行的状态已经不是 Update了。所以,controllerTableAdapter.Update(SSDataSet.Controller); 
    找不到要更新的行了。所以更新失败了
      

  8.   

    回复GhostAdai:报错了,对象不匹配,如下:
    参数“1”: 无法从“ControllerTableAdapter”转换为“System.Data.OleDb.OleDbDataAdapter”
      

  9.   

    这样不行:参数“1”:   无法从“ControllerTableAdapter”转换为“System.Data.OleDb.OleDbDataAdapter”
    就试试这个,不用一句话上吊死。SqlCommandBuilder builder = new SqlCommandBuilder(controllerTableAdapter);
      

  10.   

    回复yuexiaxiaochongzi,还是报错:
    参数“1”: 无法从“ControllerTableAdapter”转换为“System.Data.SqlClient.SqlDataAdapter”
      

  11.   

    ControllerTableAdapter 不会是自己写的类吧。。
      

  12.   

    先弄清楚ControllerTableAdapter是什么类型,再建立对应的CommandBuilder对象,实在找不到就手动指定ControllerTableAdapter的UpdateCommand对象的Update命令。建议:DataAdapter对象最好还是手动建立,容易控制。
      

  13.   

    ControllerTableAdapter   这个是我用数据源数据源向导自动生成的对象。
      

  14.   

    估计你并没有updata命令没有搞清更新原理
      

  15.   

    在代码里找找ControllerTableAdapter对象是什么类型的,CommandBuilder对象只有那么几种,你一种一种的试试,还是那句话:手动建立数据库相关对象,容易用代码控制,不会因为出什么问题找不到原因。
      

  16.   

    ControllerTableAdapter。。竟然没有这个类型,一看就是自定义的。
      

  17.   


    try
    {   
        controllerTableAdapter.Update(SSDataSet);
        SSDataSet.Controller.AcceptChanges(); 
    }
    catch(Exception e)
    {
        MessageBox.Show(e.ToString());
    }如果抛出异常,就把异常贴出来看下。
      

  18.   

    问题搞清楚了:我的ControllerTableAdapter没有updata语句,是因为ControllerTableAdapter是我用VS2005的数据源生成向导生成的,而其对应的表是没有主键的,所以生成ControllerTableAdapter的时候只有select、instert和delete命令语句,而没有update语句。最后我在表里面加了一个自增ID的主键,再重新生成的数据源,问题就解决了。谢谢各位!