更新数据集却产生并发冲突?请问是什么原因???谢谢!!!
我将DataGrid绑定到一个数据集,该数据集存储的是另外一个数据集合并的内容。!
更新两行的内容却产生冲突,这是为什么??!!!
谢谢!!!
问题点数:0、回复次数:3Top
1 楼oh_love(小熊)回复于 2003-08-01 17:56:46 得分 0
可能存在关联关系Top
2 楼tzhguan(辰雨)回复于 2003-08-01 18:12:06 得分 0
没有关联关系的!
我只是将新添加的内容写到数据集,然后将数据集的内容合并到另外一个数据集(dataGrid的数据源)!
谢谢!Top
3 楼gatr()回复于 2003-08-01 23:37:21 得分 0
一定是数据存储有问题,我原来也碰到过,如果第一次存不成功,再保存就有问题,表一定要有主键,下面是我保存数据的代码片断,供参考:
//由于大量表是基于多表查询的结果,C#不支持自动保存,但软件实际上只修改了其中一个表的数据
//其余表的数据只是显示用,因此,本软件中,另外打开待修改的表,从当前dataset中获取修改的数据,
//并填入,然后自动保存一个表即可。
public static bool SaveRecord(DataSet myDataSet,string strTableName,string strKeyField)
{
bool result=true;
DataSet Xdataset;
Xdataset=myDataSet.GetChanges(); //没有改变,自动返回
if(Xdataset==null)
return true;
if(Xdataset!=null)
{
//添加必要的数据库变量
DataSet tempDataSet;
#if SQLDATABASE //网络版
SqlDataAdapter tempDataAdapter;
SqlCommandBuilder tempCommandBuilder;
#else //单机版
OleDbDataAdapter tempDataAdapter;
OleDbCommandBuilder tempCommandBuilder;
#endif
tempDataSet=new DataSet();
//从查询表中获取当前行数据
DataRow row1=Xdataset.Tables[0].Rows[0],row2;
try
{
#if SQLDATABASE
tempDataAdapter=new SqlDataAdapter("select * from "+strTableName+
" where "+strKeyField+"="+row1[strKeyField],MyTools.ConnectionString);
tempCommandBuilder=new SqlCommandBuilder(tempDataAdapter);
#else
tempDataAdapter=new OleDbDataAdapter("select * from "+strTableName+
" where "+strKeyField+"="+row1[strKeyField],MyTools.ConnectionString);
tempCommandBuilder=new OleDbCommandBuilder(tempDataAdapter);
#endif
tempDataAdapter.Fill(tempDataSet,"temp");
//得到从数据库中直接获取的当前行
if(tempDataSet.Tables["temp"].Rows.Count==0)//添加状态,增加一新行
{
row2=tempDataSet.Tables["temp"].NewRow();
tempDataSet.Tables["temp"].Rows.Add(row2);
//自动填写编号
int num=MyTools.GetMaxNum(strTableName,strKeyField);
foreach(DataRow r in myDataSet.Tables[strTableName].Rows)
{
Application.DoEvents();
if(r[strKeyField].ToString().Trim()==row1[strKeyField].ToString().Trim())
{
r[strKeyField]=row1[strKeyField]=num.ToString();
break;
}
}
}
row2=tempDataSet.Tables["temp"].Rows[0];
//逐一从查询表中将新数据更换到原表中
for(int i=0;i<tempDataSet.Tables["temp"].Columns.Count;i++)
{
string strColumnName=tempDataSet.Tables["temp"].Columns[i].Caption.Trim();
if(row1[strColumnName].ToString().Trim()=="")
row1[strColumnName]=DBNull.Value;
if(row2[strColumnName]!=row1[strColumnName])
row2[strColumnName]=row1[strColumnName];
}
//保存到数据库中
DataSet tempXDataSet=tempDataSet.GetChanges();
tempDataAdapter.Update(tempXDataSet,"temp");
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
result=false;
}
}
return result;
}Top




