一般来说,如果设计师将拖动SqlDataAdapter的网页将无法使用SqlDataAdapter。更新(DS)错误的更新,因为属性的顺序,系统会自动生成等as.updatecommane SqlDataAdapter InsertCommand SelectCommand等。但有些程序员不喜欢使用设计器或一些地方不需要拖动SqlDataAdapter来实现这样一个巨大的东西。然后SqlDataAdapter将不会自动生成相关的查询或更新报表。所以当SqlDataAdapter。更新(DS)语句被执行,SqlDataAdapter桥不知道哪个表是没有更新。

解决方案:SqlCommandBuilder执行批量更新

1。功能:

它可以直接在数据集的UI级别上进行任何操作之后,这种方法可以自动更新您的修改到数据库,而不是每次更新到数据库。

2。使用方法




市民int UpdateByDataSet(数据strtblname DS,字符串,字符串strconnection)
{
尝试
{
SqlConnection conn =新的SqlConnection(strconnection));
SqlDataAdapter myadapter =新SqlDataAdapter();
SqlCommand mycommand =新SqlCommand(SELECT * FROM+ strtblname),(SqlConnection)Conn)本;
myadapter.selectcommand = mycommand;
带来mycommandbuilder =新SqlCommandBuilder(myadapter);
myadapter更新(DS,strtblname);
返回0;
}
抓住(businessexception errbu)
{
把errbu;
}
catch(异常错误)
{
把新的businessexception(ERR);
}
}



直接调用这个方法没关系。关键是选择*从+ strtblname 是必须的,你应该想想。这主要是告诉SqlDataAdapter表更新。

三.当使用

有时需要缓存,例如,在商品选择界面,选择好商品,以及编辑/删除/更新,

最后一个是给数据库,而不是每个步骤访问数据库,因为客户选择了n编辑/删除项目。

更新操作,如果每次提交,不仅会导致数据库冲突,导致错误,而且当数据量很大时也会由用户执行。

效率也很慢。

B中的一些接口是这样的,并且这些需求必须用缓存来实现,并且以前的操作不会提交给库。

当页面被特别提交时,该项目被提交来选择关于货物的信息和其他信息。我经常遇到这种情况。

C.,在某些情况下,只更新数据库,不读它。即从数据库不读,SqlDataAdapter不知道的是

这表被更新,它可能会通过调用更新出错。在这种情况下,你可以使用SqlCommandBuilder。

4。注:

1)。只有一个表可以更新,两个或多个相关表不能更新。

2)。表中必须有主键。

3)。更新的表字段不能具有图像类型。

5。优势:

保存代码量并节省时间。此方法可以替换所有:更新/删除/插入操作语句

6。缺点:

访问数据库的两个(SELECT * TableName)是句子,确认表,除非它是一个大的数据量,通常是没有感觉的),效率低。

以上是用SqlCommandBuilder批更新的实现。介绍了它的优点和缺点,以及注意事项。内容很详细,希望大家能喜欢。