代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open(); SqlCommand mycomm=new SqlCommand("update stu  set sex='female' where stuName='Steven'",scon);
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
 
 
da.UpdateCommand=mycomm;
 
 
DataSet ds=new DataSet();
da.Fill(ds,"stu");    

da.Update(ds,"stu");
ds.AcceptChanges();
  DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close(); }
}
}为什么该不了数据库呢?如果加上一条语句 da.UpdateCommand.ExecuteNonQuery,数据库是可以修改了,但是dataset中并没有修改。换句话说,da.Update(ds,"stu");ds.AcceptChanges();这两句在这个程序里面好像根本没有执行阿。我的问题就是,对于SqlDataAdapter,它有InsertCommand,UpdateCommand,DeleteCommand,那它的update()方法要怎么用才可以使得dataset和数据库中的数据都被修改呢?

解决方案 »

  1.   

    参看
    http://blog.csdn.net/knight94/archive/2006/03/17/627556.aspx
      

  2.   

    好象是用DATASET的ADD()方法还是NEW方法来更改数据集然后再UPDATE、ACCEPTCHANG
      

  3.   

    那个日志我看了,如果没有用datagrid,要怎么绑定阿。还有我看了您的更新按钮的事件,
                sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );            sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();            sqlDAdapter.Fill( sqlRecordSet, "EmployeeInfo" );
    最后这个fill往dataset里填充的就是更新后的数据吗?
      

  4.   

    不是,因为我做更新的时候(主要是指添加的时候),有个字段是无法获得的,所以在这儿偷个懒
    -_-||如果没有绑定,那么在设定DataAdapter的UpdateCommand、InsertCommand等等,这些是必须的,然后执行
    sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );
    即可
      

  5.   

    对阿,我就是这么写的阿,   
     SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon)//初始adapter        da.UpdateCommand=mycomm;//设adater的updatecomand属性  
      DataSet ds=new DataSet();
     da.Fill(ds,"stu");    //填充
      da.Update(ds,"stu");//更新
     ds.AcceptChanges();
    那还没有更新是怎么回事阿
      

  6.   

    dataset 相当于是数据库和程序的中转站,你在dataset里修改数据以后,数据库就跟着改了。
    干吗非要分得那么清楚,一定要说dataset和数据库。
    应用dataset的目的本身是为了更方便的操作数据库,你这样好像是多此一举。
      

  7.   

    如果仅仅是你的dataset修改了但是你的数据库没有修改,你在 sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );
    前面加上一条语句
    this.BindingContext[sqlRecordSet, "EmployeeInfo"].EndCurrentEdit();就行了
      

  8.   

    你既然要用DataAdapter.Updata()方法,就需要用使用System.Data.SqlClient.SqlCommandBuilder cmd ;对象。修改以后的代码,试试。using System;
    using System.Data;
    using System.Data.SqlClient;
    namespace UpdateOfSql
    {
    /// <summary>
    /// test 的摘要说明。
    /// </summary>
    public class test
    {
    public static void Main()
    {
    string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
    SqlConnection scon=new SqlConnection(s);
    scon.Open(); SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
             SqlCommandBuilder cmd = new  SqlCommandBuilder(da);
      DataSet ds=new DataSet();
    da.Fill(ds,"stu");                           DataRow dr = ds.Tables[0].Rows.NewRow();
                               dr["sex"] =  "female";
                               dr["stuName"] = "Steven";
                               ds.Tables[0].Rows.Add(dr);

    da.Update(ds,"stu");
    ds.AcceptChanges();
      DataTable dt=ds.Tables["stu"];
    foreach(DataRow dr in dt.Rows)
    {
    Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
    }
    scon.Close(); }
    }
    }
      

  9.   

    da.Fill(ds,"stu"); //填充//你要进行修改,否则下面这句没什么作用
    da.Update(ds,"stu");//更新
      

  10.   

    谢谢大家的帮忙。这下子弄明白了究竟少的地方在哪里了。愚翁老师:一语惊醒梦中人^^。原来我一直有个致命的理解错误。赫赫,不过现在已经明白了。wxm4585老师:非常感谢你耐心的指导。你的方法我看了,你用的方法相当于在原来的dataset里插入一条新记录,如果是执行insert语句,是可行的,但是如果是更新语句用这种方法的话,在插入的时候可能会碰上主键冲突。
    所以我最后将代码改成了这样子:
    da.Fill(ds,"stu");//填充
    DataRow[] dr=ds.Tables[0].Select("stuname='steven'");//找到要更改的行
    for(int i=0;i<dr.Length;i++)
       dr[i]["sex"] =  "female";//修改

    da.Update(ds,"stu");//更新
    ds.AcceptChanges();这样子就可以了。
    再次感谢大家。
      

  11.   

    我想问一下,你这个是固定的修改某一行,如果我想把SQL语句写活,可以根据SQL语句随意改,请问该怎么写呢