Отредактированный набор данных не обновляет базу данных и возвращает ошибку нарушения параллелизма (C #) - PullRequest
0 голосов
/ 13 сентября 2011

Я синхронизирую данные из разных таблиц (около 20 таблиц) из базы данных Sybase, к которой я получаю доступ через ODBC и SQL Server (моя основная база данных для этого проекта).

Когда я запускаю функцию для синхронизации данных (на данный момент только один путь от Sybase до SQLServer), ничего не происходит, и я получаю ошибку нарушения параллелизма: «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей».

Таблица на сервере SQL имеет 96 столбцов, а таблица на Sybase - только 94. У меня было два столбца в таблице SQL Server для целей синхронизации. Таблица SQL-сервера пуста до синхронизации в первый раз, но база данных 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. Я проверил с помощью Data vizualiser, что после слияния есть 21 строка (такая же, как в базе данных sybase).

Cheers, LB

1 Ответ

0 голосов
/ 13 сентября 2011

Это, кажется, из-за значения по умолчанию DataSet ... Посмотрите на Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей.

...