powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получение значение Identity после вставки в DataTable
25 сообщений из 26, страница 1 из 2
Получение значение Identity после вставки в DataTable
    #39788571
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как получить значение SCOPE_IDENTITY() после того, как пользователь вставил строки в DataTable ?

т.е. есть DataTable, который был заполнен из MS SQL через SqlDataAdapter.Fill .
После этого, пользователь добавляет строки в этот DataTable
Те строки, которые он добавил, я запоминаю в специальный List<DataRow> InsertedRows
Код: c#
1.
2.
3.
4.
 
var ARow = DataTable.NewRow();
 DataTable.Rows.Add(ARow); 
 InsertedRows.Add(ARow);


И записываю в БД так:
Код: c#
1.
2.
3.
4.
5.
 var builder = new SqlCommandBuilder(Adapter);
 Adapter.UpdateCommand = builder.GetUpdateCommand();
 Adapter.DeleteCommand = builder.GetDeleteCommand();
 Adapter.InsertCommand = builder.GetInsertCommand();
 Adapter.Update(DataTable);



Всё работает, но после вставки ИД вставленных строк меняется.
Я не могу понять, какие ИД получили вставленные строки.
Как это правильно сделать ?
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788575
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее,
Всё работает, но после вставки ИД вставленных строк в DataTable НЕ меняется.
Таблица такая, я хочу получить TmpID после вставки.
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[Tmp](
	[TmpID] [int] IDENTITY(1,1) PRIMARY KEY,
	[Name] [varchar](255) NULL,
	[Position] [int] NOT NULL,
	[DateOfCreate] [datetime] NOT NULL,
)

...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788750
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BНЕ меняется.а должны?
Вы бы ссылку дали из хелпа адаптера что он должен это делать.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788791
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Вопрос не том должен ли он меняться или нет.
Вопрос как получить SCOPE_IDENTITY этих значений ?
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788811
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Перечитать, fill
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788827
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Если я перечитаю, то будет не понятно, какие именно строки были вставлены.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39788846
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BPetro123,

Если я перечитаю, то будет не понятно, какие именно строки были вставлены.те которые ты вставлял. Короткая память что ли?))
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789239
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B, 4.2. Getting an Identity Column Value from SQL Server в MSDN это тоже есть, первое что нагуглилось
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789458
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

Спасибо за ответ, но это не подходит...
т.к. там предлагается писать сторед процедуру. А таблиц много. Получается, что по ХП на каждую таблицу, только для того, что бы выяснить SCOPE_IDENTITY()

В ADODB (или OLEDB, которая встроена в Windows) вообще не возникает такого вопроса.
После вставки строки в таблицу, он сам делает запрос SELECT SCOPE_IDENTITY() и проставляет в соответствующее поле в ADODB RecordSet.

Не ужели в ADO NET так нельзя ?
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789503
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BНе ужели в ADO NET так нельзя ?не имеет смысла, так как рядом тоже вставляют, меняют, удаляют.
Поэтому нужны изменения не только ваши, но и чужие.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789541
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_Bbuser,

Спасибо за ответ, но это не подходит...
т.к. там предлагается писать сторед процедуру. А таблиц много. Получается, что по ХП на каждую таблицу, только для того, что бы выяснить SCOPE_IDENTITY()

В ADODB (или OLEDB, которая встроена в Windows) вообще не возникает такого вопроса.
После вставки строки в таблицу, он сам делает запрос SELECT SCOPE_IDENTITY() и проставляет в соответствующее поле в ADODB RecordSet.

Не ужели в ADO NET так нельзя ?

Не вижу проблемы... ну не пишите процедуру если не хотите... пешите все в тексте UpdateCommand... мс. MSDN
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789544
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B, и да пИшите... и да - InsertCommand
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789818
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Не ужели в ADO NET так нельзя ?
-----
А причем тут АДО?
У тебя есть ДВЕ отдельные операции:
- запись в базы
- получение идентити из базы
Операции - записать и вернуть - нету.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789820
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

не имеет смысла
-----
Смысл - есть.
Держишь в памяти достаточно большую таблицу - надо добавить 2-3 строки и засинхронизировать ИДсы.
Мне, например, нужно достаточно регулярно.
А вот приличных реализаций пока не видел.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789821
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

А таблиц много.
-----
Наследование и строгую типизацию таблиц еще никто не отменял.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39789846
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PinkCatДержишь в памяти достаточно большую таблицу - надо добавить 2-3 строки и засинхронизировать ИДсы.вопрос был - зачем?
Ну не модно счас держать в памяти большую таблицу).
PinkCatА вот приличных реализаций пока не видел.дак это звоночек к тому что вдруг постановка не верна? Или к примеру, все пошли другим путем.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39790839
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Ну не модно
-----
Много чего сейчас не модно. Вот как не могут сделать нормально-удобное - так и не модно...
Это не значит что оно не правильно.


Переделывал как-то процедурку аллокации элементов на форме.
Да-да, есть и такие автоматы...
Работала - медленно. Пока не написал индекс.
Ну и зачем мне это было писать, если сделав изначально нормальный типизированный датасет с таблицами все получил бы автоматом?
И в базу мне его сбрасывать совершенно не надо - только перестановка цифирек по месту.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39790899
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PinkCatЭто не значит что оно не правильно.чисто бизнес.
Подавление большой корпорацией множества мелких кустарных решений "для клиента".
Чисто бизнес.
Десктоп ушел в веб, таблицы в списки, датаСет в ОРМ.
Обновление строки в таблице ушло в библиотечный компонент Таблица со всеми мыслимыми хотелками.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39790988
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Подавление большой корпорацией множества мелких кустарных решений
-----
В параллельной ветке поковыряли решение большой корпорации - неэффективность - жуткая...


ушло в библиотечный компонент Таблица
-----
А перегрузить ее не пробовал? Там получается красиво и не медленно.
Я вот себя матом крою - не стал перегружать, а стал агрегировать...
Нее - нужное - работает, а вот прибамбасы - обрезаны...
По ходу - надо было писать свою имплементацию IDb*...
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39791044
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PinkCatА перегрузить ее не пробовал?нормально.
Они либо виртуальные с бесконечным скроллом. Либо пагинация.
Но ведь платные же все)).
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39791785
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то я вообще не понимая о чём идёт речь в последних 10 сообщениях.
Так есть способ узнать Identity без своего велосипеда ?
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39791797
PinkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Так есть способ узнать Identity без своего велосипеда ?
-----
​Ну тебе же написали - вставляешь строку и запрашиваешь Идентити по последней вставке.
Две отдельные операции.

А чтобы не копировать велосипед в количестве 100500 раз - наследуешься от DataTable.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39791838
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BЧто то я вообще не понимая о чём идёт речь в последних 10 сообщениях.спасибо что рассказал.

Valery_BТак есть способ узнать Identity без своего велосипеда ?
Я вроде не ошибался выше когда говорил перечитать.
Ты пробовал с тех пор?
Вот еще более разжевано:
авторМетод Update позволяет решить задачу по передаче внесенных изменений обратно в источник данных; но может оказаться так, что другие клиенты уже внесли изменения в данные источника данных с того момента, как последний раз было осуществлено заполнение DataSet. Чтобы обновить применяемый объект DataSet с использованием текущих данных, воспользуйтесь DataAdapter и методом Fill. Произойдет добавление новых строк к таблице, а обновленная информация будет включена в существующие строки.
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39823314
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BЧто то я вообще не понимая о чём идёт речь в последних 10 сообщениях.
Так есть способ узнать Identity без своего велосипеда ?

+ к описанному выше: в запросе можно использовать output

https://stackoverflow.com/questions/10999396/how-do-i-use-an-insert-statements-output-clause-to-get-the-identity-value
...
Рейтинг: 0 / 0
Получение значение Identity после вставки в DataTable
    #39823880
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

В результате я сделал так:
Код: c#
1.
2.
3.
4.
5.
 SqlCommandBuilder builder = new SqlCommandBuilder(Adapter);
 ...
 var Temp = builder.GetInsertCommand();
 Adapter.InsertCommand = new SqlCommand(Temp.CommandText + ";SELECT SCOPE_IDENTITY() as " + "[" + KeyField + "]");
 Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;



При этом, если написать
Код: c#
1.
2.
Adapter.InsertCommand = builder.GetInsertCommand();
Adapter.InsertCommand.CommandText = "Hello world!"


т.е. если поставить заведомо неправильную SQL команда на вставку, то ничего не ломается , а запись вставляется в табилцу.
Он не обрабатывает CommandText, и выполняет только то, что CommandBuilder создал вначале.

Эту глюко-фичу я вообще не могу объяснить.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Получение значение Identity после вставки в DataTable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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