OleDbDataAdapter.Update(DataSet,srcTable) 可以更新数据到数据库
DataSet.AcceptChanges()更新成功后,同步内存表用的,该方法和数据库操作无关,通常将数据更新到数据库后,让内存表和物理表做一下同步而已。
DataSet.AcceptChanges()更新成功后,同步内存表用的,该方法和数据库操作无关,通常将数据更新到数据库后,让内存表和物理表做一下同步而已。
解决方案 »
- 网站快捷方式怎么做出来的
- 怎么在gridview里面的某列加日历控件呀?
- DataGridView数据分类汇总问题!
- 关于从数据库得到数据后显示的问题!(50分)
- 请问一个关于static的问题
- 把程序放到任何栏的系统盒里,退出后,系统盒里的图标还在,如何在退出时清除系统盒里的图标?
- PropertyGrid中的属性如何以中文显示?
- 请问 A窗体上有label控件,B窗体继承了A窗体,怎么去访问这个label控件?
- 如何在数据库中搜索给定的任意关键词
- 关于C#使用网络连接方式连接三菱的PLC
- 为什么listView.Items.GetItemAt(0),得到的不是ListViewItem类?
- 窗体加载事件,并影城
还不是很明白,我的理解有两个歧义
1、 AcceptChanges方法就是把 DataSet 里的所有数据状态变成 未被修改 ~?
2、 AcceptChanges方法会导致 DataSet 里的所有数据重新从数据库读取,达到同步的目的?
另外就是,我更新数据库之后,同步,以哪个为准?是以被我修改过的 DataSet ?还是以 更新后的数据 为准?我的猜想是,某些更新,可能不成功,此种情况会产生什么问题呢~?
2、当你修改完内存表后,又提交到数据库(真实的保存了),但是此刻内存表和数据库就不一样了,
调用AcceptChanges()之后,刚才内存表所有改变和数据库一样了。AcceptChanges()不会从数据库提取任何数据,仅仅是内存数据的变动
通常是更新到数据库后,调用该方法用来同步。
看 MSDN,是一个跟数据库没有任何关系的方法:
http://msdn.microsoft.com/zh-cn/library/system.data.dataset.acceptchanges(VS.80).aspx至于你说的 Update,它可能会在完成后调用 DataSet.AcceptChange()
来分别调用 UpdateCommand, InsertCommand, DeleteCommand。
AcceptChanges() 则会把所有的 RowState 修改为 UnChange。所以,顺序不要弄错了。AcceptChanges 之后再 Update,就查不到被改变行,而不会去更新数据库。
我们使用自己编写的DLL,直接更新DataTable或DataSet,
缺点:效率低
优点:编码真简单
DataSet 如果有个 Update 方法就好了,呵呵~
那还有一个Reset(),什么时候用呢?
是这样的
OleDbDataAdapter.Update或根据数据行的RowState 来的
public DataSet Insert_Sdp()
{
SqlConnection con = new SqlConnection(Configuration.Conn);
SqlDataAdapter sdp = new SqlDataAdapter();
DataSet dt = new DataSet();
SqlCommand comm = new SqlCommand(); comm.Connection = con;
comm.CommandText = "select Names,Address,Pid,Image from Users";
sdp.SelectCommand = comm;//首先要指定selectitem,并且字段要制定清楚,和insert字段个数和名称一致
SqlCommandBuilder scom = new SqlCommandBuilder(sdp);
sdp.Fill(dt, "Users"); comm.CommandText = "Insert into Users values(@Pid,@Names,@Address,@Image)";
SqlParameter[] pars = new SqlParameter[] {
new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
,new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
,new SqlParameter("@Address",SqlDbType.NVarChar,20,"Address")
,new SqlParameter("@Image",SqlDbType.Image,200,"Image")
}; DataRow dr = null;
for (int i = 7; i < 10; i++)
{
dr = dt.Tables[0].NewRow();
dr["Names"] = "Jeep" + i.ToString();
dr["Address"] = "第" + i.ToString() + "街道";
dr["Pid"] = i + 8;
dt.Tables[0].Rows.Add(dr);
}//通过对表值的修改,实现方法Update(table) SqlCommandBuilder icom = new SqlCommandBuilder(sdp);
sdp.InsertCommand = comm;//insert com语句
sdp.Update(dt.Tables["Users"]);
dt.AcceptChanges();
return dt;
}//我这里有简单的例子,你看一看,datble要加新的行,存储过程无需添加值,后和select的字段要一致。
最后要有SqlCommandBuilder 实例化一次。 供参考