关于DataGrid数据改动后更新数据库的函数,大家帮忙看看错在那里啊?
public bool updatesql(DataSet dsss,String tablename,String sql)
{
  SqlConnection cnn=new SqlConnection(cnnstr);
  cnn.Open();
  SqlDataAdapter da=new SqlDataAdapter(sql,cnn);
  SqlCommandBuilder cb=new SqlCommandBuilder(da);
  dsss.AcceptChanges();
  try
    {
     da.Update(dsss,tablename);
     cnn.Close();
     return true;
     }
      catch
{
  cnn.Close();
  return false;     
}
}
再Form中直接调用该函数,参数为Form中的DataGrid中改动之后的数据,为什么数据库中的数据并没有改动啊?我错在那里啊?

解决方案 »

  1.   

    错在你的
    dsss.AcceptChanges();
    伴置放得不对。
    应该是放在更新数据后再执行那句话
      

  2.   

    还是不对啊!把dsss.AcceptChanges()放在更新之后,该函数就返回false值了!
      

  3.   

    把dsss.AcceptChanges()放在更新之后,该函数就返回false值了!---没这个道理。
    dsss.dsss.AcceptChanges()更加客户端DataSet里的DataRow的状态的,和数据库更新没什么关系。还有,我照你的例子做过了,完全没问题。你的错误发生在你贴的代码之外的其他地方。
      

  4.   

    错的原因有很多, dsss.AcceptChanges();的代码是应该放在
     da.Update(dsss,tablename); 之后的,不过sqlDataAdapter.Update(ds)
    方法执行过程中记得会自动调用ds.AcceptChanges();方法,所以也就不需要了。
    问题可能在 SqlCommandBuilder cb=new SqlCommandBuilder(da);执行后,生成的更新Sql语句有问题。
    导致真有记录需要跟新时出错,返回false。
    ==========
    你上面的代码为什么会返回true,是应该在 da.Update(dsss,tablename); 之前
    调用了dsss.AcceptChanges();造成的结果就行本来DataSet中有需要更新的数据状态被置成未修改了。
    所以根本不会调用那些SqlCommandBuilder 生成的更新语句而返回true;
    =========
    不建议使用SqlCommandBuilder偷懒的做法,
    参考,
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx