SqlDataAdapter可以用SqlCommandBuilder 实现批量更新

SqlCommandBuilder 实现批量更新

1.
功能:

可以实现DataSetUI做任意操作后,直接丢给这个方法,个方法就可以自把你的修改更 新到数 ,而没必要次都更新到

数据

2.
使用方法
public DataSetUpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
SqlConnection conn = new SqlConnection(strConnection));

SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
try

{

lock(this) //
理并情况(分布式情况)

{

myAdapter.Update(ds,strTblName);

}

}

catch(Exception err)
{

conn.Close();
throw new BusinessException(err);
}

return ds; //
数据集的行状在更新后会都变为: UnChange,次更新后客端要用返回的ds

}



public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{


SqlConnection conn = new SqlConnection(strConnection));
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);

SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );

SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);

myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();

myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();

myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();

try

{

lock(this) //
理并情况(分布式情况)

{

conn.Open();

myAdapter.Update(ds,strTblName);

conn.Close();

}

return ds; //
数据集的行状在更新后会都变为: UnChange,次更新后客端要用返回的ds }
catch(Exception err)
{

conn.Close();
throw new BusinessException(err);
}
}

直接两个方法的任意一个就OK,明的一点是select * from "+strTblName是一定要的,
作用大家也应该想到了,主要是告 SqlDataAdapter更新哪个表


3.
么时候用?

a.
候需要存的候,比如在一个商品选择界面,选择好商品,并且编辑//更新后,

最后一并交数据,而不是操作都访问数据,因户选择商品可能n编辑/

更新操作,如果次都提交,不但容易引起数据冲突,发错误,而且当数据量很大在用户执

效率上也得有些慢

b.
有的界面是这样的有的界面是这样的,需求要求一定用实现,确之前的操作不提交到,

专门提交的按钮时才提交商品选择信息和商品的其它信息. 常遇到这样的情况

c.
有些情况下只往数据里更新,不. 也就是没有从数据SqlDataAdapter也就不知道是

更新哪表了,Update就很可能出了。这样的情况下可以用SqlCommandBuilder .


4.
注意点:
1.
只能更新一个表,如果此数据集是从两个或者两个以上的表关联而来的,不能用此方法自更新
2.
表中必须设置主
3.
更新的表中字段不能有image型的

5.
:

省代量,时间个方法可以代替所有的: 更新//插入操作

6.
缺点:
访问两次数据(select * TableName,就是句,要确是哪个表,除非是很大的数据量,
一般是感不到的),效率稍微有些慢

你可能感兴趣的:(数据库(数据集))