Я синхронизирую данные из разных таблиц (около 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