代码如下
SqlCommand updatecomm=conn.CreateCommand();
updatecomm.CommandText="update sfyhb set yhdm=@newyhdm,sfyh=@newsfyh where yhdm=@oldyhdm and sfyh=@oldsfyh";

SqlParameter param;
param=updatecomm.Parameters.Add("@newyhdm",SqlDbType.Char,2,"yhdm");
param.SourceColumn="yhdm";
param.SourceVersion=DataRowVersion.Current;
param=updatecomm.Parameters.Add("@newsfyh",SqlDbType.VarChar,8,"sfyh");
param.SourceColumn="sfyh";
param.SourceVersion=DataRowVersion.Current;
param=updatecomm.Parameters.Add("@oldyhdm",SqlDbType.Char,2,"yhdm");
param.SourceColumn="yhdm";
param.SourceVersion=DataRowVersion.Original;
param=updatecomm.Parameters.Add("@oldsfyh",SqlDbType.VarChar,8,"sfyh");
param.SourceColumn="sfyh";
param.SourceVersion=DataRowVersion.Original;

da.UpdateCommand=updatecomm;
try
{
da.Update(ds);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
ds.AcceptChanges();
但是总说没有提供@newyhdm和@newsfyh两个参数。

解决方案 »

  1.   

    完整代码演示
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
      

  2.   

    我又用了commandbuilder,查询代码
    SqlCommand mycomm=conn.CreateCommand();
    mycomm.CommandText="select yhdm ,sfyh  FROM sfyhb ";
    da.SelectCommand=mycomm;
    conn.Open();
    ds.Clear();
    SqlCommandBuilder cb=new SqlCommandBuilder(da);
    da.Fill(ds,"yh");
    ds.Tables[0].PrimaryKey=new DataColumn[]{ds.Tables[0].Columns["yhdm"]};
    conn.Close();
    dataGrid1.DataSource=ds.Tables[0].DefaultView;
    dataGrid1.SetDataBinding(ds,"yh");
    在datagrid直接修改数据后,按钮保存
      da.Update(ds,"yh");
    提示“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。”