Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
Здравствуйте!

вопрос таков:
регистрируется новый пользователь (совсем новый)

нужно получить созданное в базе его Id.


спасибо.
15 май 11, 22:49    [10655478]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
qwerty777
Member

Откуда:
Сообщений: 158
Что значит регистрируется? Поподробнее можно
15 май 11, 22:55    [10655496]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Телепаты с девяти утра по будням работают.
15 май 11, 22:56    [10655499]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
qwerty777
Что значит регистрируется? Поподробнее можно


Имеется ввиду следующее:
1. сайт с базой mssql
2. на сайте есть страница регистрации новых пользователей (анкета).
3. когда новый пользователь заполнил анкету, жмет - "зарегистрироваться"
4. по нажатию - в базе создается новая строка и пользователю присваивается id.

вот этот id надо сразу определить, как только он был создан.
16 май 11, 00:13    [10655713]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Ну вот когда покажете как выполняется п.4, тогда вам и ответят.
16 май 11, 00:58    [10655807]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vladka63
qwerty777
Что значит регистрируется? Поподробнее можно


Имеется ввиду следующее:
1. сайт с базой mssql
2. на сайте есть страница регистрации новых пользователей (анкета).
3. когда новый пользователь заполнил анкету, жмет - "зарегистрироваться"
4. по нажатию - в базе создается новая строка и пользователю присваивается id.

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

Сообщение было отредактировано: 16 май 11, 01:02
16 май 11, 00:58    [10655808]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
Гавриленко Сергей Алексеевич
vladka63
пропущено...


Имеется ввиду следующее:
1. сайт с базой mssql
2. на сайте есть страница регистрации новых пользователей (анкета).
3. когда новый пользователь заполнил анкету, жмет - "зарегистрироваться"
4. по нажатию - в базе создается новая строка и пользователю присваивается id.

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


id (строка) создается автоматически (asp.net, Membership) и записывается в таблицу базы ("ручного" кода при создании id нет. Стандартные asp.net мехнизмы).
как только id создан - сразу хотелось бы его определить применяя хранимую процедуру.
16 май 11, 01:18    [10655840]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
iljy
Member

Откуда:
Сообщений: 8711
vladka63,

вас спрашивают, какие команды передаются серверу. Со "стандартными механизмами .нет" вам в другой форум.
16 май 11, 01:26    [10655850]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
попробую угадать...
@@identityscope_identity
output

?
16 май 11, 06:26    [10655962]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Knyazev Alexey,

Не угадал - SqlMembershipProvider вызывает хп dbo.aspnet_Users_CreateUser .

А автор - жжёт, нихрена непонятно где он хочет получить ид юзера (guid).
16 май 11, 06:38    [10655968]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
dbo.aspnet_Membership_CreateUser
16 май 11, 06:39    [10655969]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
Ken@t
Knyazev Alexey,

Не угадал - SqlMembershipProvider вызывает хп dbo.aspnet_Users_CreateUser .

А автор - жжёт, нихрена непонятно где он хочет получить ид юзера (guid).


вот в эту хранимую процедуру, которая создает нового пользователя, нужно добавить возврат "только что" созданного UserId :
USE [wwwsite]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[aspnet_Users_CreateUser]
@ApplicationId uniqueidentifier,
@UserName nvarchar(256),
@IsUserAnonymous bit,
@LastActivityDate DATETIME,
@UserId uniqueidentifier OUTPUT
AS
BEGIN
IF( @UserId IS NULL )
SELECT @UserId = NEWID()
ELSE
BEGIN
IF( EXISTS( SELECT UserId FROM dbo.aspnet_Users
WHERE @UserId = UserId ) )
RETURN -1
END

INSERT dbo.aspnet_Users (ApplicationId, UserId, UserName, LoweredUserName, IsAnonymous, LastActivityDate)
VALUES (@ApplicationId, @UserId, @UserName, LOWER(@UserName), @IsUserAnonymous, @LastActivityDate)

RETURN 0
END

16 май 11, 12:57    [10657754]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Glory
Member

Откуда:
Сообщений: 104751
vladka63

вот в эту хранимую процедуру, которая создает нового пользователя, нужно добавить возврат "только что" созданного UserId :
USE [wwwsite]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[aspnet_Users_CreateUser]
@ApplicationId uniqueidentifier,
@UserName nvarchar(256),
@IsUserAnonymous bit,
@LastActivityDate DATETIME,
@UserId uniqueidentifier OUTPUT
AS
BEGIN
IF( @UserId IS NULL )
SELECT @UserId = NEWID()
ELSE
BEGIN
IF( EXISTS( SELECT UserId FROM dbo.aspnet_Users
WHERE @UserId = UserId ) )
RETURN -1
END

INSERT dbo.aspnet_Users (ApplicationId, UserId, UserName, LoweredUserName, IsAnonymous, LastActivityDate)
VALUES (@ApplicationId, @UserId, @UserName, LOWER(@UserName), @IsUserAnonymous, @LastActivityDate)

RETURN 0
END


В этой процедуре уже есть возврат "только что" созданного UserId
16 май 11, 13:00    [10657771]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
так у вас и так @UserId uniqueidentifier OUTPUT
чего уж там добавлять то,просто вызов напишите правильный
16 май 11, 13:00    [10657776]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
Maxx
так у вас и так @UserId uniqueidentifier OUTPUT
чего уж там добавлять то,просто вызов напишите правильный


вот об этом вызове речь и идет.
мне, к сожалению, редко такая задача попадалась.
делал в свое время два или три раза.. помню, что как то просто, но хитро ( в моем понимании).
вот и прошу помочь професионалов.
16 май 11, 15:19    [10658987]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Glory
Member

Откуда:
Сообщений: 104751
vladka63
.
вот и прошу помочь професионалов.

так о том, как программировать на .NET, нужно спрашивать в форуме по .NET
16 май 11, 15:28    [10659074]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
Glory
vladka63
.
вот и прошу помочь професионалов.

так о том, как программировать на .NET, нужно спрашивать в форуме по .NET


речь о хранимой процедуре.
когда она будет прописана, я её вызову в бизнес-уровень и обработаю на C# .
16 май 11, 15:33    [10659142]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Glory
Member

Откуда:
Сообщений: 104751
vladka63
Glory
пропущено...

так о том, как программировать на .NET, нужно спрашивать в форуме по .NET


речь о хранимой процедуре.
когда она будет прописана, я её вызову в бизнес-уровень и обработаю на C# .

Ну так вот и обрабатывайте на C# _выходной_ параметер процедуры
16 май 11, 15:35    [10659158]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
vladka63
Glory
пропущено...

так о том, как программировать на .NET, нужно спрашивать в форуме по .NET


речь о хранимой процедуре.
когда она будет прописана, я её вызову в бизнес-уровень и обработаю на C# .


Не занимайтесь говнокодированием , есть SqlMembershipProvider используете его экземпляр и его методы.
16 май 11, 15:56    [10659377]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
vladka63
Member

Откуда:
Сообщений: 1689
вы уж не пинайте больно)

суть в том, что создание, при помощи хранимой процедур, id и его вывод должен проходить в одной хранимой процедуре - один запрос к базе.


образно так:

1. когда пользователь заполнил анкету и нажал зарегиться, то отправляется запрос к базе.
В базе хранимая процедура создает строку под нового пользователя и присваивает ID.
2. "новенький" пересылается на защищенную странницу для зарегистрированных пользователей.
вот как раз УЖЕ на этой странице мне нужно знать id только что зарегиного пользователя - т.е после первого запроса.

что же касается SqlMembershipProvider - согласен, при помощи него можно получить ID, но в моём случае - это слишком рано.
потому что в первом запросе, когда создается пользователь, для SqlMembershipProvider еще не существует id нового пользователя.

вот поэтому в хранимой процедуре нужно дописать подзапрос.
т.е к тому, что хранимая процедура создает "новенького", добавить - и отправить обратно id новенького в том же запросе.
16 май 11, 19:08    [10660785]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура "новенького"  [new]
iljy
Member

Откуда:
Сообщений: 8711
vladka63
вы уж не пинайте больно)

суть в том, что создание, при помощи хранимой процедур, id и его вывод должен проходить в одной хранимой процедуре - один запрос к базе.


образно так:

1. когда пользователь заполнил анкету и нажал зарегиться, то отправляется запрос к базе.
В базе хранимая процедура создает строку под нового пользователя и присваивает ID.
2. "новенький" пересылается на защищенную странницу для зарегистрированных пользователей.
вот как раз УЖЕ на этой странице мне нужно знать id только что зарегиного пользователя - т.е после первого запроса.

что же касается SqlMembershipProvider - согласен, при помощи него можно получить ID, но в моём случае - это слишком рано.
потому что в первом запросе, когда создается пользователь, для SqlMembershipProvider еще не существует id нового пользователя.

вот поэтому в хранимой процедуре нужно дописать подзапрос.
т.е к тому, что хранимая процедура создает "новенького", добавить - и отправить обратно id новенького в том же запросе.

Еще раз - ваша хранимая процедура ВОЗВРАЩАЕТ вам созданый идентификатор. Как вам его получить - смотрите в доках на средство разработки.
16 май 11, 19:14    [10660817]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить