关于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中改动之后的数据,为什么数据库中的数据并没有改动啊?我错在那里啊?
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中改动之后的数据,为什么数据库中的数据并没有改动啊?我错在那里啊?
dsss.AcceptChanges();
伴置放得不对。
应该是放在更新数据后再执行那句话
dsss.dsss.AcceptChanges()更加客户端DataSet里的DataRow的状态的,和数据库更新没什么关系。还有,我照你的例子做过了,完全没问题。你的错误发生在你贴的代码之外的其他地方。
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