ВСергей
Дата: 24.05.2006 14:59:46
Имеем БД Oracle 10.1.2.0 и процедуру обновления записи в некоторой таблице:
...
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand("select ID_Obj, Fam from Users", cn);
OracleParameterCollection sqlParams = null;
//comm insert
OracleCommand cmdI = new OracleCommand("insert into Users(ID_Obj, Fam) values(:ID_Obj, :Fam)", cn);
sqlParams = cmdI.Parameters;
sqlParams.Add("ID_Obj", OracleDbType.Decimal, 20, "ID_Obj");
sqlParams.Add("Fam", OracleDbType.Varchar2, 30, "Fam");
da.InsertCommand = cmdI;
//comm update
OracleCommand cmdU = new OracleCommand("update USERS set Fam = :Fam where ID_Obj = :ID_Obj", cn);
sqlParams = cmdU.Parameters;
sqlParams.Add("ID_Obj", OracleDbType.Decimal, 20);
sqlParams.Add("Fam", OracleDbType.Varchar2, 30);
da.UpdateCommand = cmdU;
//comm delete
OracleCommand cmdD = new OracleCommand("delete from users where ID_Obj= :ID_Obj", cn);
cmdD.Parameters.Add("ID_Obj", OracleDbType.Decimal, 20, "ID_Obj");da.DeleteCommand = cmdD;
DataTable ta2 = new DataTable("Users");
ds.Tables.Add(ta2);
da.Fill(ta2);
// - insert
/*DataRow newRow = ds.Tables["Users"].NewRow();
newRow["ID_Obj"] = 3;
newRow["Fam"] = "Пример добавления ";
ds.Tables["Users"].Rows.Add(newRow);*/
// - update1
DataRow r;
for (int k = 0; i<ta2.Rows.Count; k++)
{
r = ds.Tables["Users"].Rows[k];
if (r["ID_Obj"].ToString() == "1" )
{
r["Fam"] = "Пример обнавления";
}
}
da.Update(ds,"Users");
cn.Close();
Почему добавление или удаление - проходят нормально, а при обновлении - выпадает в ошибку:Unhandled Exception: System.Data.DBConcurrencyException: Concurrency violation: the UpdateCommand afected 0 records. и т.д. и т.п.?