Проблема с Update (IBPROVIDER)
От: ZeeM  
Дата: 07.03.07 08:02
Оценка:
Работаю с IBProviderom для NET, СУБД — Interbase

Столкнулся с проблемой при обновлении данных в базе, если изменения
были произведены в DataGridView(в нем отображается таблица).

Вот пример кода:
------------------------------------------------------------------------------------------
public void UpdateObjectName(DataSet DS)
{
// Подключаемся к БД
DataBaseConnect();

string upd_com = "UPDATE OBJECTS SET ";
upd_com += "NAME = :NAME, PHONENUMBER = :PHONENUMBER ";
upd_com += "WHERE (ID=:ID)";

OleDbTransaction trans = conn.BeginTransaction();

try
{
OleDbCommand cmd = new OleDbCommand(upd_com, conn, trans);

cmd.Parameters.Add("ID", OleDbType.Integer,0,"ID");
cmd.Parameters.Add("NAME", OleDbType.VarChar, 20,"NAME");
cmd.Parameters.Add("PHONENUMBER", OleDbType.VarChar, 20,"PHONENUMBER");

daObjects.UpdateCommand = cmd;
daObjects.Update(DS, "OBJECTS");
trans.Commit();

// Отключаемся от базы данных
DataBaseClose();
}
catch (OleDbException myOLEDBException)
{
OLEDBExceptionReport(myOLEDBException);
return ;
}
catch (Exception myException)
{
ExceptionReport(myException);
return ;
}
}
------------------------------------------------------------------------------------------

В результате exception — Concurrency violation: the UpdateCommand
affected 0 of the expected 1 records.

В чем может быть трабла?
Re: Проблема с Update (IBPROVIDER)
От: Andrew Merkulov Россия www.ibprovider.com
Дата: 07.03.07 09:32
Оценка: 3 (1)
Здравствуйте, ZeeM

ZM>В чем может быть трабла?

Добавляйте параметры в тойже последовательности, в которой они идут в команде:
  string upd_com = "UPDATE OBJECTS SET ";
   upd_com += "NAME = :NAME, PHONENUMBER = :PHONENUMBER ";
   upd_com += "WHERE (ID=:ID)";

   .......

   cmd.Parameters.Add("NAME", OleDbType.VarChar, 20,"NAME");
   cmd.Parameters.Add("PHONENUMBER", OleDbType.VarChar, 20,"PHONENUMBER");
  cmd.Parameters.Add("ID", OleDbType.Integer,0,"ID");

P.S. OleDbCommand не поддерживают работу с именованными параметрами. Хотя IBProvider предоставляет интерфейс для получения имен параметров ADO.Net этот интерфейс просто игнорирует. Так что во избежании ошибок:



Немного обо мне, и моем круге
Мои профиль в LiveLib — книги
Re[2]: Проблема с Update (IBPROVIDER)
От: ZeeM  
Дата: 07.03.07 10:21
Оценка:
Здравствуйте, Andrew Merkulov, Вы писали:

AM>Здравствуйте, ZeeM


ZM>>В чем может быть трабла?

AM>Добавляйте параметры в тойже последовательности, в которой они идут в команде:
AM>
AM>  string upd_com = "UPDATE OBJECTS SET ";
AM>   upd_com += "NAME = :NAME, PHONENUMBER = :PHONENUMBER ";
AM>   upd_com += "WHERE (ID=:ID)";

AM>   .......

AM>   cmd.Parameters.Add("NAME", OleDbType.VarChar, 20,"NAME");
AM>   cmd.Parameters.Add("PHONENUMBER", OleDbType.VarChar, 20,"PHONENUMBER");
AM>  cmd.Parameters.Add("ID", OleDbType.Integer,0,"ID");

AM>P.S. OleDbCommand не поддерживают работу с именованными параметрами. Хотя IBProvider предоставляет интерфейс для получения имен параметров ADO.Net этот интерфейс просто игнорирует. Так что во избежании ошибок:

AM>


Спасибо!
Все работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.