powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как прально добавить получить идентификатор новой записи в БД ?
25 сообщений из 333, страница 1 из 14
как прально добавить получить идентификатор новой записи в БД ?
    #38325949
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
клиент создаёт новую запись в БД. и надо бы тут же получить идентификатор добавленной строки.
пусть таблица вида:
Код: sql
1.
create table MyTable( ID1 int,  ID2 uniqueidentifier ,name Nvarchar(50)....)....




как лучше поступить с id/guid

1. при создании таблицы использовать такой код
Код: sql
1.
2.
3.
create table MyTable(
GUID 	UniqueIdentifier	RowGuidCol	UNIQUE DEFAULT NewSequentialID()
)....


но как тогда возвертать обратно значение GUID для новой записи
2.
предварительно сенерить гуид и потом его вернуть
Код: sql
1.
2.
3.
4.
DECLARE @id uniqueidentifier
SET @ID=NEWID()
insert into MyTable(ID2) values(@ID)
 SELECT @ID



3. генерить гуид в клиенте
Код: c#
1.
2.
3.
4.
5.
6.
7.
protected Guid GetGuid()
        {
            byte[] BB = new byte[16];
            Random R = new Random();
            R.NextBytes(BB);
            return new Guid(BB);
        }


4. а если хочется работать не с 16-байтныйм гуидом , а с ID1 (int) то как в таком случае лучшее поступать.

хотелось бы у сообщества узнать , как будет лучше сделать.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38325954
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что за база данных?
в MSSQL 2012 есть sequence, через него можно заранее новое значение получать.
или , если версия ниже, то смотри @@IDENTITY/scope_identity() или через OUTPUT в самом запросе
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38326135
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er
Код: c#
1.
2.
3.
4.
5.
6.
7.
protected Guid GetGuid()
        {
            byte[] BB = new byte[16];
            Random R = new Random();
            R.NextBytes(BB);
            return new Guid(BB);
        }


Это что за жесть такая?

P.S. Возьми EF и не мучайся.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38326162
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er3. генерить гуид в клиенте
Код: c#
1.
2.
3.
4.
5.
6.
7.
protected Guid GetGuid()
        {
            byte[] BB = new byte[16];
            Random R = new Random();
            R.NextBytes(BB);
            return new Guid(BB);
        }


Не делай так. Используй Guid.NewGuid().
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38326164
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileНе делай так. Используй Guid.NewGuid().
не думаю, что реализация NewGuid() принципиально другая.

МСУВозьми EF и не мучайся.
возьму , но пожже.

предметно , как всё таки лучше в случае с гуидом. в клиенте его мастрячить, или вытаскивать из insert into mytable
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327332
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

beg-in-er1. при создании таблицы использовать такой код
create table MyTable(
GUID UniqueIdentifier RowGuidCol UNIQUE DEFAULT NewSequentialID()
)....


но как тогда возвертать обратно значение GUID для новой записи

Код: sql
1.
2.
3.
insert into MyTable (...)
output inserted.RowGuidCol
values (..)
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327335
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон

Код: sql
1.
2.
3.
insert into MyTable (...)
output inserted.GUID
values (..)
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327359
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

сделать можно по разному.
1. Если генерить GUID на клиенте, то и нефиг его потом возвращать - он и так уже есть
2. Если генерить GIUD на сервере, то лучше вставку в таблицу делать с использованием хранимой процедуры и объявить его как out параметр
3. целочисленный идентификатор лучше на уровне столбца объявить как IDENTITY и его значение после вставки получать с использованием scope_identity()

В принципе как тебе удобней так и делай.
IMHO, CRUD лучше организовать с использованием хранимых процедур, защищённость больше, контроля больше, поддерживаемость лучше.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327455
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erпредметно , как всё таки лучше в случае с гуидом. в клиенте его мастрячить, или вытаскивать из insert into mytable
Если у тебя двухзвенка, то ее место на свалке и всяческие генерации гуидов клиентами могут привести к ядерному взрыву. Если у тебя сервер приложений (как и подобает), генери гуид им и не заморачивайся.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327457
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovIMHO, CRUD лучше организовать с использованием хранимых процедур, защищённость больше, контроля больше, поддерживаемость лучше.
-1

защищенность ничем не лучше, чем в случае апп сервера

масштабировать решение на порядки сложнее

масштабировать логику на порядки сложнее

логике в бд не место, бд - это только данные и порядок их хранения (constraints, required)
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327500
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУAlex KuznetsovIMHO, CRUD лучше организовать с использованием хранимых процедур, защищённость больше, контроля больше, поддерживаемость лучше.
-1
"Вы не любите кошек? Да, Вы просто не умеете их готовить!" (с)
МСУ защищенность ничем не лучше, чем в случае апп сервера

Ню-ню...
"Вскрыть" один пароль от логина для подключение апп-сервера к базе данных - и все данные "на блюдечке" с полным комплектом прав доступа. Вот такая "небольшая проблемка" с безопасностью в апп-серверах...
"Вскрытие" пароля даже администратора сервера баз данных не всегда гарантирует получение доступа к данным базы даже для элементарного селекта - сугубо "к сведению"... Такая вот "чисто небольшая" разница...
И не будем "о грустном" - про встроенные возможности серверов баз данных в части аудита, когда реализация даже минимального их набора в приложении на апп-сервере обойдется дороже всей заказной системы...
МСУ масштабировать решение на порядки сложнее

А Вы точно пробовали? "Терзают смутные сомнения" (с)
Понятно, что это делается не по щелчку пальцев, но явно, что без "надрыва" - и в самом "тяжелом" случае с таким же самым уровнем сложности.

Ну, и слоган от "не-МС" - "пока Вы масштабируете один Ваш сервер приложений, один наш сервер баз данных обслуживает запросы от сотен серверов приложений"...
"Точка невозврата", с которой возникает необходимость масштабировать сервер баз данных находится гораздо дальше, чем у любого, самого мощного апп-сервера - хотя бы в силу более высоких требований к качеству ПО сервера БД и несколько более высокого требуемого уровня квалификации для разработчика.
МСУ масштабировать логику на порядки сложнее

А с чего бы это логику надо было "масштабировать"?! Логика должна просто работать!
И если логики нет - тут не поможет не только масштабирование, но даже Г.Б-г
МСУ логике в бд не место, бд - это только данные и порядок их хранения (constraints, required)
А зачем Вам констрэйнты? У Вас же "умный" сервер приложений - вот пусть приложение на нем и занимается обслуживанием "логики". И сразу на фокспро или парадокс переходите - это же как раз для них и была придумана технология серверов приложений: по основной причине, что ПО с "железом" были сильно по-дороже, да и файл-сервера не особо справлялись с многопользовательским доступом к файловым БД...

По нынешним временам использовать в качестве тупого склада таблиц сервер баз данных - мягко говоря, не умно.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327603
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, "Апологету" АПП серверов

Код: plaintext
защищенность ничем не лучше, чем в случае апп сервера но и не хуже (доводы про логин и пароль уже были приведены), вместе с тем, наличие АПП сервера не отрицает возможности использования хранимых процедур для решения поставленных задач - они как-бэ параллельны, мухи отдельно, котлеты отдельно...

Код: plaintext

масштабировать решение на порядки сложнее Про масштабируемость : что мы вкладываем в данное понятие? Развитие (сиречь расширение) объектов и соответственно увеличение количества столбцов в таблице? Ну так в любом случае надо допиливать напильником и объект в БД и его отражение в конечном приложении. Не важно АПП сервер это или что-то другое... Надеюсь, что с этим Вы не станете спорить...
Масштабируемость по количеству клиентских подключений и различных объектов, обращающихся к одной и той-же сущности БД?
Так тут тоже, клиентская часть (это может быть и сам апп сервер) должна только запросить сервер БД выполнить действие с записью таблицы. И если что-то из элементарных правил проверок и созданий изменится, то лучше произвести изменения в одном месте и не распространять подобные изменения по сотням и тысячам клиентских мест.

Код: plaintext

масштабировать логику на порядки сложнее

логике в бд не место, бд - это только данные и порядок их хранения (constraints, required)Эти два пункта, на мой взгляд, выступают вместе...
Про логику в БД полностью согласен. В крупных решениях, зашивать логику в БД ещё тот геморрой, тем не менее для мелких решений элементарные проверки можно выполнять в CRUD на уровне хранимых процедур (IMHO).

Скажу даже более, богатый опыт работы с SAP ERP в сравнении с тем-же Oracle App Server, показывает, что вынесение логики из БД есть благо, потому как не нужно править код в нескольких местах, т.е. нет лапшы, которая тянется через несколько слоёв. Вместе с тем сервер БД выполняет свою прямую работу - обеспечивает доступ к данным и их хранение, ни больше ни меньше.

PS. "Апологет" - это по доброму (обидеть не хотел, потому и в кавычках), т.к. сам являюсь сторонником серверов приложений :-) тем не менее, не на них одних всё крутится, иногда, для проезда в магазин за пивом, ракета не нужна, достаточно просто самоката (или лисапеда) :-)
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327624
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mv"Вскрыть" один пароль от логина для подключение апп-сервера к базе данных - и все данные "на блюдечке" с полным комплектом прав доступа. Вот такая "небольшая проблемка" с безопасностью в апп-серверах...Сценарий для новой передачи на канале ТВ3 ?
sphinx_mvИ не будем "о грустном" - про встроенные возможности серверов баз данных в части аудита, когда реализация даже минимального их набора в приложении на апп-сервере обойдется дороже всей заказной системы...Что не так с аудитом безопасности в WCF?
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327628
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsovвместе с тем, наличие АПП сервера не отрицает возможности использования хранимых процедур для решения поставленных задач - они как-бэ параллельны, мухи отдельно, котлеты отдельно...Использовать ХП с целью оптимизации можно. А выносить туда весь CRUD, при наличии автоматической генерации оного в ORM - маразм.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327638
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

ну как раз то генерация CRUD то самое простое
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327643
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosАлексей К,

ну как раз то генерация CRUD то самое простоеНу и что?
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327646
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovIMHO, CRUD лучше организовать с использованием хранимых процедур, защищённость больше, контроля больше, поддерживаемость лучше .Поддерживаемость хуже.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327649
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть в проге такие вещи как Портфель, Программы, Меоприятия, Проекты, Работы и Договоры
У каждого из них могут быть атрибутивные типы типа Бюджет, Смета и т.д.
Стоит задача синтеза одних атрибутивных типов вверх и распределения вниз
причем таких вещей много - Холдинг, Предприятие, Производство,.... : да любые иерархические отношения заданные как определенный конструкт
такие задачи в Управление Предприятием 30-70% всей работы
врядь ли какой ОРМ поможет изящно решить эту задачу
а имея собственный механизм описание таких конструкций (обобщенных отношений типов с заданными ограничениями) возможно генерация обобщенных методов (хп в том числе)
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327650
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosАлексей К,

ну как раз то генерация CRUD то самое простоеНу и что?
да то что эта простота нафиг не нужна
нужны сложные вещи а простые и сами сделаем
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327658
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВот есть в проге такие вещи как Портфель, Программы, Меоприятия, Проекты, Работы и Договоры
У каждого из них могут быть атрибутивные типы типа Бюджет, Смета и т.д.
Стоит задача синтеза одних атрибутивных типов вверх и распределения вниз
причем таких вещей много - Холдинг, Предприятие, Производство,.... : да любые иерархические отношения заданные как определенный конструкт
такие задачи в Управление Предприятием 30-70% всей работы
врядь ли какой ОРМ поможет изящно решить эту задачу
а имея собственный механизм описание таких конструкций (обобщенных отношений типов с заданными ограничениями) возможно генерация обобщенных методов (хп в том числе)Ну берём EF и пишем. В чём проблема?
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327664
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAlex Kuznetsovskiped...Использовать ХП с целью оптимизации можно. А выносить туда весь CRUD, при наличии автоматической генерации оного в ORM - маразм. А вот здесь подробней. В чём именно заключается маразм использования хранимок для CRUD в связке с ORM?

Кстати, я в своё время разрабатывал закрытый farmework для реализации шаблона MVC, и там у меня был автоматизированный генератор бызнес объектов (ну т.е. ORM ) который прекрасно генерировал для CRUD хранимые процедуры и всё работало...
Бизнес логика, естественно была реализована не на уровне БД, а на уровне бизнес объектов в модели...
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327665
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

че пишем то?
что еф дает для этого? он что мне ХП сгенерирует для расчетов?
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327668
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разве ОРМ в силах распознать заданные концептуальные конструкции и выделить их автоматом?
по моему они кроме фориенкей нифига не видят или я плохо вижу
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327673
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovАлексей Кпропущено...
Использовать ХП с целью оптимизации можно. А выносить туда весь CRUD, при наличии автоматической генерации оного в ORM - маразм. А вот здесь подробней. В чём именно заключается маразм использования хранимок для CRUD в связке с ORM?

Кстати, я в своё время разрабатывал закрытый farmework для реализации шаблона MVC, и там у меня был автоматизированный генератор бызнес объектов (ну т.е. ORM ) который прекрасно генерировал для CRUD хранимые процедуры и всё работало...
Бизнес логика, естественно была реализована не на уровне БД, а на уровне бизнес объектов в модели...Зачем их генерировать, если их можно не генерировать? Лишний слой, за которым надо следить.
...
Рейтинг: 0 / 0
как прально добавить получить идентификатор новой записи в БД ?
    #38327682
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAlex Kuznetsovпропущено...Зачем их генерировать, если их можно не генерировать? Лишний слой, за которым надо следить.ААА, ну так-то да, ежели что изменится просто в проверке данных перед вставкой в таблицу, то мы просто для 100-200 клиентов сделаем обновление ПО и всё, делов-то... Ну и "лишнего" слоя заодно не будет...
...
Рейтинг: 0 / 0
25 сообщений из 333, страница 1 из 14
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как прально добавить получить идентификатор новой записи в БД ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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