C# 编辑的数据集不更新数据库并返回并发冲突错误(C)
我正在同步来自不同表的数据,大约来自Sybase数据库的20个表,我通过ODBC和SQL Server访问Sybase数据库,这是本项目的主数据库 当我启动函数以仅以一种方式将数据从Sybase同步到SQLServer时,什么也没有发生,我得到一个并发冲突错误:并发冲突:UpdateCommand影响了预期的1条记录中的0条 SQL server上的表有96列,而Sybase上的表只有94列。为了同步,我在SQLServer表中有两列。SQL server表在首次同步之前为空,但sybase数据库已经有21行 您可以查看下面的代码以更好地理解它:C# 编辑的数据集不更新数据库并返回并发冲突错误(C),c#,sql-server,concurrency,synchronization,sybase,C#,Sql Server,Concurrency,Synchronization,Sybase,我正在同步来自不同表的数据,大约来自Sybase数据库的20个表,我通过ODBC和SQL Server访问Sybase数据库,这是本项目的主数据库 当我启动函数以仅以一种方式将数据从Sybase同步到SQLServer时,什么也没有发生,我得到一个并发冲突错误:并发冲突:UpdateCommand影响了预期的1条记录中的0条 SQL server上的表有96列,而Sybase上的表只有94列。为了同步,我在SQLServer表中有两列。SQL server表在首次同步之前为空,但sybase数据
try
{
//Connect to the erp Sybase database through ODBC
OdbcConnection myConnection;
//OdbcCommand myCommand;
string MySQLRequest = "SELECT * FROM toto";
string tableName = "toto";
myConnection = new OdbcConnection("dsn=blabla;UID=bla;PWD=bla;");
//settings of the current database
myConnection.Open();
//get the data from MangoERP and store it into a dataset
OdbcDataAdapter dasyb = new OdbcDataAdapter(MySQLRequest, myConnection);
DataSet dserp = new DataSet(); //94columns
dasyb.Fill(dserp, tableName);
int dserpcount=dserp.Tables[0].Rows.Count;
//get the data from MangoPMS and store it into a dataset
SqlDataAdapter dasql = new SqlDataAdapter(MySQLRequest, mango_pms.Properties.Settings.Default.ConnectionStringSQLServer);
DataSet dspms = new DataSet();//96columns
dasql.Fill(dspms, tableName);
int dspmscount = dspms.Tables[0].Rows.Count;
//merge the dataset together
if (dserpcount > 0)
{
dspms.Tables[0].Merge(dserp.Tables[0], false, MissingSchemaAction.Ignore);
dspmscount = dspms.Tables[0].Rows.Count;
}
string dtutcnow=DateTime.UtcNow.ToString();
for (int i = 0; i < dspmscount; i++)
{
if (dspms.Tables[0].Rows[i]["erpsyncdate"].ToString() == "")
{
dspms.Tables[0].Rows[i]["erpsyncdate"] = dtutcnow;
}
if (dspms.Tables[0].Rows[i]["erpsync"].ToString() == "")
{
dspms.Tables[0].Rows[i]["erpsync"] = 2; //1=pms, 2=erp
}
}
//create an SqlCommandBuilder
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dasql);
//save back to pms table
dasql.Update(dspms, tableName);
//Close the connections
dasyb.Dispose();
dasql.Dispose();
myConnection.Close();
}
catch
{
MessageBox.Show("Can not synchronize from ERP database!");
}
你知道为什么我不能保存数据集dspms中的数据吗。我使用数据Vizaliser检查了合并后sybase数据库中的21行
干杯,
LB这似乎是因为数据集的默认值。。。
看看我在网上查了很多帖子,包括这篇。我真的不明白…:我的SQL server表为空,但我不在服务器上执行直接SQL请求,而是在数据集上执行直接SQL请求。我希望在dataadpater更新期间,它会将所有21行插入数据库…我认为数据集的乐观并发性对我来说是可以的,因为我正在更新整个行,但我不明白为什么它没有插入行。。。这可能是因为我在数据库中有两个主键吗?如果合并可以更改其中一个键字段,这可能是问题所在。合并更改了所有dspms数据集,因为在它为空之前。您认为这是一个问题吗?如果主键字段之一发生了更改-肯定是这样。