日期:2014-05-19  浏览次数:20778 次

SqlDataAdapter更新数据库,并发的问题
问大家个问题
我在用SqlDataAdapter更新数据库的时候,如果出现并发的情况会有许多相同的数据,怎么处理啊

------解决方案--------------------
"如果出现并发的情况会有许多相同的数据 "

不明白什么意思?什么时候出现并发,什么相同的数据?
------解决方案--------------------
有没可能是update时造成的数据重复
------解决方案--------------------
DataSet ds = new DataSet();
SqlConnection scon = new SqlConnection( "server=;uid=sa;pwd=123;database=aaa ");
SqlDataAdapter da = new SqlDataAdapter( "select * from ccc ", scon);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
scon.Open();
da.Update(ds, "ccc ");
scon.Close();


用SqlCommandBuilder 实现批量更新

1.功能:

可以实现你对DataSet在UI层做任意操作后,直接丢给这个方法,这个方法就可以自动把你的修改更 新到数 据库中,而没必要每次都更新到

数据库

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更新哪个