powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / CommandBuilder и @@Identity
7 сообщений из 7, страница 1 из 1
CommandBuilder и @@Identity
    #35391185
Suzeren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос собственно такой... Если делать DataAdapter визуальными средствами и генерировать INSERT, UPDATE и DELETE команды, то он в InsertCommand сделает все правильно, а именно:

Insert into xxx (f1,f2,f3) values (@p1,@p2,@p3)
select @@IDENTITY

Но, как только начинаешь генерировать это в коде таким образом:

SqlConnection SQL = "..."
SqlDataAdapter DA = new SqlDataAdaper("select f1,f2,f3", SQL);
SqlCommandBuilder CB = new SqlCommandBuilder(DA);

То в InsertCommand генерится только

Insert into xxx (f1,f2,f3) values (@p1,@p2,@p3)

Когда делаешь визуально, часть запроса которая возвращает автоинкремент генерируется если опционально установить в Advanset Options -> Reftesh the DataSet.
Неужели в коде нельзя заставить CommandBuilder генерить нормально также InsertCommand?
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391202
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вспомните,шаги которые проходите в визуальном мастере для dataadapter?
там наверное указывается ключевое поле и т.п.

а тут в SqlCommandBuilder вроде вы не указали это.

или мое представление далеко от реалий?
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391224
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
You might want to map output parameters back to the updated row of a DataSet. One common task would be retrieving the value of an automatically generated identity field or time stamp from the data source. The DbCommandBuilder will not map output parameters to columns in an updated row by default. In this instance you must specify your command explicitly. For an example of mapping an automatically generated identity field back to a column of an inserted row, see Retrieving Identity or Autonumber Values (ADO.NET).
читаем ...
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/wd_adonet/html/6e3fb8b5-373b-4f9e-ab03-a22693df8e91.htm
вот полная ссылка. сча дочитаю,тоже скажу че нито.
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391230
Suzeren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CommandBuilder все нормально определяет. Потому как из адаптера но в любом случае забирает схму таблицы и не генерирует insert into для автоинкрементного поля, хотя, к примеру, в SelectCommand оно фигурирует. Выходит что все он понимает... Не в этом дело.
Просто совершенно не видно никаких свойств в объекте коммандбилдера которые могли бы вкл/выкл Optimistic concurrecy и соотв других опций...
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391234
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл такой :)
билдер этого не будет делать.
если вам надо то идите по этой ссылке.

совет из практики,забудьте о билдере.
забудьте,об автоапдейтах простого.
пишите руками.
тут не такая тесная связь слоя данных со слоем визуальных контролов,чтобы простые случаи делались автоматически. выход только в руках ваших.
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391264
Suzeren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да понятно что про билдер забыть надо... Просто лениво писать все руками, когда идет работа только с 1 таблицей :) Просто всего 1 таблица ни с кем не связаная....
Решение нашлось такое:

SRC]
SqlCommandBuilder cb = new SqlCommandBuilder(DA_Money);
DA_Money.InsertCommand = new SqlCommandBuilder(DA_Money).GetInsertCommand();
DA_Money.InsertCommand.CommandText += " SELECT @ID_OUT = @@IDENTITY";
DA_Money.InsertCommand.Parameters.Add("ID_OUT", SqlDbType.Int, 0, "id");
DA_Money.InsertCommand.Parameters["ID_OUT"].Direction = ParameterDirection.Output;
DA_Money.InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;[
[/src]
Просто удивило что что-то надо обязательно делать визуально и нельзя сделать в коде... 0_о
Глупость какая-то...
...
Рейтинг: 0 / 0
CommandBuilder и @@Identity
    #35391269
Suzeren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, пардон, предыдущий код не работает ))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / CommandBuilder и @@Identity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]