zoukankan
html css js c++ java
aspnet_Membership_CreateUser
ALTER
PROCEDURE
dbo.aspnet_Membership_CreateUser
@ApplicationName
NVARCHAR
(
256
),
@UserName
NVARCHAR
(
256
),
@Password
NVARCHAR
(
128
),
@PasswordSalt
NVARCHAR
(
128
),
/**/
/*
和密码有关的,不知道什么用处,-_-!!
*/
@Email
NVARCHAR
(
256
),
@PasswordQuestion
NVARCHAR
(
256
),
@PasswordAnswer
NVARCHAR
(
128
),
@IsApproved
BIT
,
@TimeZoneAdjustment
INT
,
@CreateDate
DATETIME
=
NULL
,
@UniqueEmail
INT
=
0
,
@PasswordFormat
INT
=
0
,
@UserId
UNIQUEIDENTIFIER
OUTPUT
/**/
/*
用户ID为输出参数
*/
AS
BEGIN
/**/
/*
声明变量并付初值
*/
DECLARE
@ApplicationId
UNIQUEIDENTIFIER
SELECT
@ApplicationId
=
NULL
DECLARE
@NewUserId
UNIQUEIDENTIFIER
SELECT
@NewUserId
=
NULL
DECLARE
@IsLockedOut
BIT
/**/
/*
是否锁定
*/
SET
@IsLockedOut
=
0
DECLARE
@LastLockoutDate
DATETIME
/**/
/*
最后一次锁帐号的时间
*/
SET
@LastLockoutDate
=
CONVERT
(
DATETIME
,
'
17540101
'
,
112
)
/**/
/*
转换格式(112---ISO标准---输入输出为YYMMDD,
'17540101'可能为初始值)
*/
DECLARE
@FailedPasswordAttemptCount
INT
/**/
/*
失败密码尝试次数
*/
SET
@FailedPasswordAttemptCount
=
0
DECLARE
@FailedPasswordAttemptWindowStart
DATETIME
/**/
/*
密码失败尝试窗口打开时间
*/
SET
@FailedPasswordAttemptWindowStart
=
CONVERT
(
DATETIME
,
'
17540101
'
,
112
)
DECLARE
@FailedPasswordAnswerAttemptCount
INT
/**/
/*
遗失密码问题尝试次数
*/
SET
@FailedPasswordAnswerAttemptCount
=
0
DECLARE
@FailedPasswordAnswerAttemptWindowStart
DATETIME
/**/
/*
遗失密码问题输入窗口打开时间
*/
SET
@FailedPasswordAnswerAttemptWindowStart
=
CONVERT
(
DATETIME
,
'
17540101
'
,
112
)
DECLARE
@NewUserCreated
BIT
DECLARE
@ReturnValue
INT
SET
@ReturnValue
=
0
DECLARE
@ErrorCode
INT
SET
@ErrorCode
=
0
DECLARE
@TranStarted
BIT
SET
@TranStarted
=
0
IF
(
@@TRANCOUNT
=
0
)
--
--如果活动事务数为0,开始事务
BEGIN
BEGIN
TRANSACTION
SET
@TranStarted
=
1
--
--开始事务,设置事务参数为1
END
ELSE
SET
@TranStarted
=
0
--
---如果活动事务不为0,设置事务参数为0
/**/
/*
此存储过程在插入数据的时候先验证一些字段,然后判断用户ID是否在USER表中存在,不存在则插入数据,
存在则回滚事务.然后再为MEMMBER表插入数据.整个存储过程可以分两大部分,第一为USERS表插数据,第二为
MEMMBER表插数据.
*/
EXEC
dbo.aspnet_Applications_CreateApplication
@ApplicationName
,
@ApplicationId
OUTPUT
--
执行存储过程输出@ApplicationId
IF
(
@@ERROR
<>
0
)
--
如果错误不为0
BEGIN
SET
@ErrorCode
=
-
1
--
设置错误参数为-1
GOTO
Cleanup
--
转先Cleanup
END
/**/
/*
错误不为0则回滚事务,所以转向Cleanup,Cleanup处理回滚事务并返回错误参数,
下面的好几段都是判断,如果有错误就转向Cleanup,全部验证结束才开始真正插入数据
*/
IF
(
@CreateDate
IS
NULL
)
--
--如果创建日期为空,则执行存储过程输出创建日期
EXEC
dbo.aspnet_GetUtcDate
@TimeZoneAdjustment
,
@CreateDate
OUTPUT
ELSE
SELECT
@CreateDate
=
DATEADD
(n,
-
@TimeZoneAdjustment
,
@CreateDate
)
--
switch TO UTC time
/**/
/*
DATEADD在向指定日期加上一段时间的基础上,返回新的 datetime 值(n/mi是minute的缩写)
*/
SELECT
@NewUserId
=
UserId
FROM
dbo.aspnet_Users
WHERE
LOWER
(
@UserName
)
=
LoweredUserName
AND
@ApplicationId
=
ApplicationId
/**/
/*
查询用户ID,为了验证用户ID是否存在
*/
IF
(
@NewUserId
IS
NULL
)
--
--如果用户ID不存在
BEGIN
SET
@NewUserId
=
@UserId
--
--用传入的用户ID给@NewUserId附值,做为下面存储过程的输入参数,也是输出参数
EXEC
@ReturnValue
=
dbo.aspnet_Users_CreateUser
@ApplicationId
,
@UserName
,
0
,
@CreateDate
,
@NewUserId
OUTPUT
/**/
/*
此存储过程也是创建用户的(表不同,数据字段不同,所以两个存储过程里进行的验证字段也不同.)
也是判断用户ID是否存在的,然后进行插入数据,存在返回-1,不存在返回0
*/
SET
@NewUserCreated
=
1
--
--表示存储过程已在aspnet_Users表中添加数据完成
/**/
/*
因为用户数据是保存在多张表中的,所以不止在一张表中添加数据
*/
END
ELSE
BEGIN
--
--如果用户ID存在则要转向回滚状态
SET
@NewUserCreated
=
0
--
-表示此用户存在,位能创建
IF
(
@NewUserId
<>
@UserId
AND
@UserId
IS
NOT
NULL
)
--
-此处是为了判断返回怎样的错误类型
/**/
/*
符合条件的用户ID在aspnet_Users中存在,但是不等于输入的@UserId,且@UserId不为空
*/
BEGIN
SET
@ErrorCode
=
6
GOTO
Cleanup
--
转向回滚
END
END
IF
(
@@ERROR
<>
0
)
--
-继续判断(应该是判断上面有没有发生什么错误吧)
BEGIN
SET
@ErrorCode
=
-
1
GOTO
Cleanup
END
IF
(
@ReturnValue
=
-
1
)
--
-返回值为上面添加另一张表的返回值,-1表示未添加
BEGIN
SET
@ErrorCode
=
10
GOTO
Cleanup
--
-转向回滚
END
IF
(
EXISTS
(
SELECT
UserId
FROM
dbo.aspnet_Membership
WHERE
@NewUserId
=
UserId ) )
--
-aspnet_Membership表中是否存在要插入的用户ID
BEGIN
SET
@ErrorCode
=
6
--
--存在返回错误代码
GOTO
Cleanup
--
--转向回滚
END
SET
@UserId
=
@NewUserId
--
-此@NewUserId为上面SELECT语句的@NewUserId
/**/
/*
SET @NewUserId = @UserId是为插aspnet_Users表而副职
*/
/**/
/*
SET @UserId = @NewUserId是为插aspnet_Memmbership表而副职
*/
IF
(
@UniqueEmail
=
1
)
--
判断邮箱唯一
BEGIN
IF
(
EXISTS
(
SELECT
*
FROM
dbo.aspnet_Membership m
WITH
( UPDLOCK,
HOLDLOCK
)
WHERE
ApplicationId
=
@ApplicationId
AND
LoweredEmail
=
LOWER
(
@Email
)))
BEGIN
--
-如果存在此邮箱
SET
@ErrorCode
=
7
GOTO
Cleanup
END
END
/**/
/*
全部验证完毕,且为表aspnet_Users 添加成功后,插入aspnet_Membership表
*/
INSERT
INTO
dbo.aspnet_Membership
( ApplicationId,
UserId,
Password,
PasswordSalt,
Email,
LoweredEmail,
PasswordQuestion,
PasswordAnswer,
PasswordFormat,
IsApproved,
IsLockedOut,
CreateDate,
LastLoginDate,
LastPasswordChangedDate,
LastLockoutDate,
FailedPasswordAttemptCount,
FailedPasswordAttemptWindowStart,
FailedPasswordAnswerAttemptCount,
FailedPasswordAnswerAttemptWindowStart )
VALUES
(
@ApplicationId
,
@UserId
,
@Password
,
@PasswordSalt
,
@Email
,
LOWER
(
@Email
),
@PasswordQuestion
,
@PasswordAnswer
,
@PasswordFormat
,
@IsApproved
,
@IsLockedOut
,
@CreateDate
,
@CreateDate
,
@CreateDate
,
@LastLockoutDate
,
@FailedPasswordAttemptCount
,
@FailedPasswordAttemptWindowStart
,
@FailedPasswordAnswerAttemptCount
,
@FailedPasswordAnswerAttemptWindowStart
)
IF
(
@@ERROR
<>
0
)
BEGIN
SET
@ErrorCode
=
-
1
GOTO
Cleanup
END
IF
(
@NewUserCreated
=
0
)
/**/
/*
如果用户存在,更新用户的最近活动时间(如果不是本人添加的,那这个时间怎么可以算是这个用户
的最近活动时间呢.这里没理解.
*/
BEGIN
UPDATE
dbo.aspnet_Users
SET
LastActivityDate
=
@CreateDate
WHERE
@UserId
=
UserId
IF
(
@@ERROR
<>
0
)
BEGIN
SET
@ErrorCode
=
-
1
GOTO
Cleanup
END
END
/**/
/*
上面的两个IF在添加成功的情况下好象不执行的样子
*/
SELECT
@CreateDate
=
DATEADD
( n,
@TimeZoneAdjustment
,
@CreateDate
)
IF
(
@TranStarted
=
1
)
BEGIN
SET
@TranStarted
=
0
COMMIT
TRANSACTION
END
RETURN
0
Cleanup:
IF
(
@TranStarted
=
1
)
/**/
/*
如果事务参数为1
*/
BEGIN
SET
@TranStarted
=
0
/**/
/*
设置事务参数为0
*/
ROLLBACK
TRANSACTION
/**/
/*
回滚事务
*/
END
RETURN
@ErrorCode
/**/
/*
返回错误参数
*/
END
GO
查看全文
相关阅读:
AlphaMobileControls
.NET Compact Framework下注册表导出工具的开发
windows moblie 5.0在托管程序中实现短信接收和拦截
自定义MessageBox
Windows Mobile 背景灯控制
windows Mobile 启动Mobile Office
windows mobile 5.0 进程管理、窗体管理、重启和关闭操作系统
让Windows Mobile模拟器通过你的PC上网
Windows Mobile获取存储卡容量及使用情况
透明背景
原文地址:https://www.cnblogs.com/ruanbl/p/489398.html
最新文章
HylaFAX传真服务器sendfax命令
整理PostgreSQL数据库表记录数
qmail服务器之一[查找邮件]
PostgreSQL命令pg_dump
网络蜘蛛程序开发
centos5编译安装mysql4.1.22
CSS滑动门技术实现TAB标签切换效果实例,支持各种浏览器
FLASH效果,通过xml文件链接数据
php 全文搜索和实现替换的代码
用php截取utf8中文字符串乱码的解决方法
热门文章
AJAX 表格字段数据排序,点击表头每列排序
hdu 1052 田忌赛马终于ac掉了
hdu 2093 考试排名使用 sscanf () 用于判断输入有没有括号
Windows Mobile上的模拟按键操作
播放嵌入资源的声音文件
Tomcat5.5配置虚拟主机
Windows Mobile 九宫格
Windows Mobile 今日插件开发
支持输入法变更事件的InputPanel
背景渐变
Copyright © 2011-2022 走看看