ataSet1=new DataSet("DataSetMadCoder");
sqlDataAdapter1=new System.Data.SqlClient.SqlDataAdapter();
sqlDataAdapter1.SelectCommand=new System.Data.SqlClient.SqlCommand("select * from T_INFO",sqlConnection1);
sqlDataAdapter1.Fill(dataSet1,"tab1");
dataSet1.Tables["tab1"].Rows[0]["T_ID"]="SuperTeacher";
sqlDataAdapter1.Update(dataSet1,"tab1");为什么在执行到Update的时候会给出下列异常:
未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。
其他信息: 当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。然后我定义了一个UpdateCommand命令之后就好了,但是我觉得很奇怪,难到DataAdapter的功能如此单薄?非要我自己手动的写更新的代码才能更新DB?不能自动检测那些位子修改了,然后自己更新DB吗???那ADO.NET强大在那里?又方便在那里?谢谢高手解疑!

解决方案 »

  1.   

    DataAdapter可以帮你生成UpdateCommand,问题是你没叫它这么做,你觉得怪你还是怪它?
      

  2.   

    呵呵,楼主再好好学习一下ADO.Net吧,一个很简单的更新逻辑问题你要自己提供更新逻辑或者用CommamdBuilder自动生成这是一个列子SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", nwindConn);
    SqlCommandBuilder custCB = new SqlCommandBuilder(custDA);
    custCB.QuotePrefix = "[";
    custCB.QuoteSuffix = "]";DataSet custDS = new DataSet();nwindConn.Open();
    custDA.Fill(custDS, "Customers");// Code to modify data in the DataSet here.// Without the SqlCommandBuilder, this line would fail.
    custDA.Update(custDS, "Customers");
    nwindConn.Close();