powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как получить Auto Incerment Value?
25 сообщений из 37, страница 1 из 2
как получить Auto Incerment Value?
    #33036149
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте все!

У меня вот такая проблемка:

есть таблица в которой Primery Key автоматически инкрементируется при INSERTe.
в эту таблицу я делаю инсерт при помощи

Код: plaintext
1.
2.
3.
Dim cmd As New SqlCommand(sqlinsert)
cmd.Connection() = strConn
cmd.ExecuteNonQuery()

как мне получить только что сгенерировашийся ID? Функции Last или Max не подоходят, потому что база данных мульиюзерская.

Заранее благодарен!
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036203
Стр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
судя по всему у тебя СУБД это MS SQL
наверное, нужно выполнить батч по ExecuteScalar
Код: plaintext
1.
INSERT INTO ... VALUES(...);
SELECT SCOPE_IDENTITY();

подробнее в MSDN
Retrieving Identity or Autonumber Values
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036276
-=LL=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй...
Dim i As Integer = cmd. ExecuteScalar()
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036342
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=LL=-Попробуй...
Dim i As Integer = cmd. ExecuteScalar()

и что по твоему должно вернуться?
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036387
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=LL=-Попробуй...
Dim i As Integer = cmd. ExecuteScalar()

не работает
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036391
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стрсудя по всему у тебя СУБД это MS SQL
наверное, нужно выполнить батч по ExecuteScalar
Код: plaintext
1.
INSERT INTO ... VALUES(...);
SELECT SCOPE_IDENTITY();

подробнее в MSDN
Retrieving Identity or Autonumber Values

это нужно с DataSet оперировать, как я понял... в моем случае это не очень к месту.
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036408
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторФункции Last или Max не подоходят, потому что база данных мульиюзерская.
Какая база???
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036426
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT SCOPE_IDENTITY(); - можно выполить отдельной командой сразу после вставки, если в однлм баче сложно
_______________________________________________________
Господи, сколько ещё не сделано... А сколько ещё предстоит не сделать...!
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036481
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrig авторФункции Last или Max не подоходят, потому что база данных мульиюзерская.
Какая база???

MS SQL Server 2000
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036500
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторMS SQL Server 2000
А почему "Функции Last или Max не подоходят"???
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036525
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrig авторMS SQL Server 2000
А почему "Функции Last или Max не подоходят"???

наврено потомучто транзакции могут быть, блокировки там всякие:)
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036548
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrig авторMS SQL Server 2000
А почему "Функции Last или Max не подоходят"???

потому что пока я вожусь с макс value этот value может уже быть совсем другим value если другие юзера присоеденили data.
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036558
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быть может по всякому - хочется услышать от автора: в чём затруднения?...
P.S. SCOPE_IDENTITY() - на это блокировки и транзакции не распространяются???
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036572
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ищи по запросу - две строки не могут же быть одинаковыми (различия только в id)... Сделал инсерт и выполнил запрос на выборку вставленной строки строки?
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036600
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrigБыть может по всякому - хочется услышать от автора: в чём затруднения?...
P.S. SCOPE_IDENTITY() - на это блокировки и транзакции не распространяются???

BOL
SCOPE_IDENTITY and @@IDENTITY will return last identity values generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.


тоесть мы видим только то, что сами вставили, а как уже правильно говорил avoda, пока мы через max или last будем пытаться вытащить значение, в это же время кто-то быстрее успеет вставить еще одну строку, и эту функции вернут неверные значения. Мультиюзерная среда однако;)
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036641
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так чего у него не получается???
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036656
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrigТак чего у него не получается???
я так понимаю не знает как получить SCOPE_IDENTITY или @@IDENTITY
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036683
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И я незнаю - объясни нам пожалуйста...
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036698
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стрсудя по всему у тебя СУБД это MS SQL
наверное, нужно выполнить батч по ExecuteScalar
Код: plaintext
1.
INSERT INTO ... VALUES(...);
SELECT SCOPE_IDENTITY();

подробнее в MSDN
Retrieving Identity or Autonumber Values

может дашь примерчик? Чет в микисофтском прмере не разберусь, тем более что никогда не делал бачи.

Спасибо!
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036710
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrigИ я незнаю - объясни нам пожалуйста...
объясняю: как получить Value от только что присоеденёного датасет.
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036754
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторобъясняю: как получить Value от только что присоеденёного датасет.Не зацикливайся под вечер... то что хочешь ты я уже понял...

Лиман Артёмя так понимаю не знает как получить SCOPE_IDENTITY или @@IDENTITYИ я незнаю - объясни нам пожалуйста...
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036757
Angello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему бы процедуру не использовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE Procedure ИмяПроцедуры
(
    @Name   nvarchar( 50 ),
    @RecordID int OUTPUT
)
AS
INSERT INTO ИмяТаблицы
(
    Name
)

VALUES
(
    @Name,
)
SELECT
    @RecordID = @@Identity
GO
Или такой вариант тоже не подходит по неизвестным нам соображениям? Если так поделитесь ими ...
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036769
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelloА почему бы процедуру не использовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE Procedure ИмяПроцедуры
(
    @Name   nvarchar( 50 ),
    @RecordID int OUTPUT
)
AS
INSERT INTO ИмяТаблицы
(
    Name
)

VALUES
(
    @Name,
)
SELECT
    @RecordID = @@Identity
GO
Или такой вариант тоже не подходит по неизвестным нам соображениям? Если так поделитесь ими ...

подходит. Как мне его считать в VB.NET application?
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036793
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrigИ я незнаю - объясни нам пожалуйста...
объясняю на примере
Код: plaintext
1.
2.
3.
4.
5.
Dim cmd As New SqlClient.SqlCommand("insert into Test(data) values('bla bla')", con)
        cmd.ExecuteNonQuery()
        cmd.Cancel()
        cmd.CommandText = "select SCOPE_IDENTITY()"
        Dim id$ = cmd.ExecuteScalar
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036802
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angello
Код: plaintext
1.
    @RecordID = @@Identity

это конечно тоже вариант, только я бы все же советовал использовать вместо @@Identity SCOPE_IDENTITY() так как при инсерте может сработать триггер, который в свою очередь также проведет вставку, соответсвенно @@Identity вернет не наш Identity, а чужой. Эта один из подводных камней при программировании на TSql, так как на момент написания хранимки такого триггреа может и не быть и всё будет работать хорошо. И хорошо еще если мы одни программируем базу, а если коллективная разработка - я добавлю триггер, ты ничего о не знать не будешь, но логика твоей хранимки испортится...
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как получить Auto Incerment Value?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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