C# 编辑的数据集不更新数据库并返回并发冲突错误(C)

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数据

我正在同步来自不同表的数据,大约来自Sybase数据库的20个表,我通过ODBC和SQL Server访问Sybase数据库,这是本项目的主数据库

当我启动函数以仅以一种方式将数据从Sybase同步到SQLServer时,什么也没有发生,我得到一个并发冲突错误:并发冲突:UpdateCommand影响了预期的1条记录中的0条

SQL server上的表有96列,而Sybase上的表只有94列。为了同步,我在SQLServer表中有两列。SQL server表在首次同步之前为空,但sybase数据库已经有21行

您可以查看下面的代码以更好地理解它:

            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数据集,因为在它为空之前。您认为这是一个问题吗?如果主键字段之一发生了更改-肯定是这样。