SqlConnection myCon = new SqlConnection();
        myCon.ConnectionString = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PNorthwind;Data Source=MyComputer";
        myCon.Open();
        SqlDataAdapter adapter = new SqlDataAdapter();
        SqlCommand selectCmd = new SqlCommand();
        selectCmd.Connection = myCon;
        selectCmd.CommandText = "SELECT * FROM 客户";  //客户表的“客户ID”字段为主关键字
        adapter.SelectCommand = selectCmd;
        DataSet dataSet = new DataSet("客户"); 
        adapter.Fill(dataSet);  
        //更新
        SqlCommand updateCmd = new SqlCommand();
        updateCmd.Connection = myCon;
        updateCmd.CommandText = "UPDATE 客户 SET 公司名称='肯德基' where 客户ID='ALFKI'";
        adapter.UpdateCommand = updateCmd;        adapter.Update(dataSet);
        dataSet.AcceptChanges();
        //updateCmd.ExecuteNonQuery();//改成这条语句则可以更新急死了,花费了我整整一天了,都没有搞定!

解决方案 »

  1.   

    adapter.SelectCommand = selectCmd
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
      

  2.   

    那可以就用updateCmd.ExecuteNonQuery();
    更新后再重新綁定
      

  3.   

    adapter.Update(dataSet,表名); 
    应该传个表名吧.
      

  4.   

    例子:using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand(queryString, connection);
            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);        connection.Open();        DataSet dataSet = new DataSet();
            adapter.Fill(dataSet, tableName);        //code to modify data in DataSet here        //Without the SqlCommandBuilder this line would fail
            adapter.Update(dataSet, tableName);        return dataSet;
        }详细内容参见msdn
      

  5.   

    SqlDataAdapter 不会自动生成实现 DataSet 的更改与关联的 SQL Server 实例之间的协调所需的 Transact-SQL 语句。但是,如果设置了 SqlDataAdapter 的 SelectCommand 属性,则可以创建一个 SqlCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。然后,SqlCommandBuilder 将生成其他任何未设置的 Transact-SQL 语句。每当设置了 DataAdapter 属性,SqlCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 SqlDataAdapter 与一个 SqlCommandBuilder 对象(或相反)互相关联。为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索到元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema 方法来更新元数据。SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperation 异常,不生成命令。
      

  6.   

            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet, "tableName");        //code to modify data in DataSet here        //Without the SqlCommandBuilder this line would fail
            adapter.Update(dataSet, "tableName");
      

  7.   

    adapter.Update(dataSet); 
    dataSet.AcceptChanges(); 
    ==>
    dataSet.AcceptChanges(); 
    adapter.Update(dataSet);
      

  8.   

    你得写法时正确得,要不你抓抓错误看看,用下面得代码试试!!
    adapter.Update(dataSet);
    if(dataSet.HasErrors)
    {
    dataSet.Tables[0].GetErrors()[0].ClearErrors();
    return false;
    }
    else
    {
      dataSet.AcceptChanges();
     return true;
    }
      

  9.   

    adapter.Update(dataSet); 
    你概念不清,更新数据库有两种方法。
    1.通过CMD命令,连接数据库,并更新数据库
    2.通过DATAADAPTOR这个桥梁,首次连接,将数据FILL到DATASET中,最后断开连接,所需数据存储在DATASET中,执行DATASET操作,然后通过adapter.Update(dataSet)提交到数据库中。
    就你的程序而言,你的DATAADAPTOR填充到DATASET的是老数据,你提交的就是老数据,何谈更新???
      

  10.   

    没仔细看你的问题,我的错.
    建议楼主仔细看看DATAADAPTOR与DATASET数据操作章节,先把流程看懂,DATASET使用上很有灵活性,比如执行增删改操作,不要频繁地与数据库交互连接,而且还有撤销更新的许多种灵活方法,最后通过DATAADAPTOR更新,提交更新数据库。
    DATASET的DATAVIEW视图还可以进行过滤,筛选等功能...
      

  11.   

    没有一位说到点子上的,但分数照样给!还是自己想明白了其中的原因:是概念错误造成的(才看了几个例子,之前从未研究过asp.net )1、DataSet dataSet = new DataSet("客户");  
    其中的“客户”,是内存表DataTable的表名,完全可以随便取一个,如:
    DataSet dataSet = new DataSet("KH"); 但很多书上例子往往取得与实表同名,结果让人产生混淆。2、 updateCmd.CommandText = "UPDATE 客户 SET 公司名称='肯德基' where 客户ID='ALFKI'";其中的表名:"客户",究竟是内存表的表名还是数据库中实表的表名?答案是:实表,因为内存表是无法用
    Update-SQL命令去更新的,只能用赋值的办法逐个字段、逐个记录去更改。3、 adapter.Update(dataSet);是当数据集dataSet中的数据有了变动之后,才会将此变动存回到数据库的实表中,否则不会进行任何操作。
         
    4、如果将DataSet dataSet = new DataSet("客户"); 改成
    DataSet dataSet = new DataSet("KH"); 
    则语句:
    updateCmd.CommandText = "UPDATE KH SET 公司名称='肯德基' where 客户ID='ALFKI'";
    编译时也不会产生什么错误(因为是在字符串中)但运行到updateCmd.ExecuteNonQuery();时就出出错!因为updateCmd.ExecuteNonQuery()语句只能对实表进行更新!