C# Sql server 2008跟踪用户是否每天登录
我需要编写一个函数,该函数将用户是否每天登录数据库表写入 每当一个用户登录到我的网站,我都需要我的函数启动并获取他的用户名和当前日期时间。如果用户在一天内登录两次,则必须再次启动该函数并编写新行。我需要的最终结果是一个包含每个登录名的数据库表,我可以每天对每个用户进行排序 这是我的函数,我在登录控件的LoggedIn事件中启动了它C# Sql server 2008跟踪用户是否每天登录,c#,sql,sql-server,C#,Sql,Sql Server,我需要编写一个函数,该函数将用户是否每天登录数据库表写入 每当一个用户登录到我的网站,我都需要我的函数启动并获取他的用户名和当前日期时间。如果用户在一天内登录两次,则必须再次启动该函数并编写新行。我需要的最终结果是一个包含每个登录名的数据库表,我可以每天对每个用户进行排序 这是我的函数,我在登录控件的LoggedIn事件中启动了它 CREATE PROCEDURE loginProc @UserId uniqueidentifier, @CurrentDateTime datet
CREATE PROCEDURE loginProc
@UserId uniqueidentifier,
@CurrentDateTime datetime
AS
BEGIN
SELECT GETDATE() AS CurrentDateTime
SELECT UserId
FROM dbo.aspnet_Users
WHERE @UserId = UserId
INSERT INTO dbo.UserLoginToday
(UserId, UserLoginPerDay)
VALUES (@UserId, @CurrentDateTime)
END
它不会向我的数据库写入任何内容。我做错了什么?这会写出我想要的正确数据吗
CREATE PROCEDURE loginProc
@UserId uniqueidentifier
AS
BEGIN
INSERT INTO dbo.UserLoginToday
(UserId, UserLoginPerDay)
SELECT UserId, GETDATE()
FROM dbo.aspnet_Users
WHERE UserId = @UserId
END
您需要使用过程而不是函数,因为函数不允许DML(Insert/Update/Delete)语句
无需将当前时间戳作为参数传递,因为它可以在存储过程内部使用
GETDATE()
生成,并插入到日志表中您忘记了为参数赋值,并且在中,您编写的@UserId=UserId
条件下,应该是UserId=@UserId
。试试这个
CREATE PROCEDURE loginProc
@UserId uniqueidentifier,
@CurrentDateTime datetime
AS
BEGIN
SELECT @CurrentDateTime = GETDATE() AS CurrentDateTime
SELECT @UserId=UserId
FROM dbo.aspnet_Users
WHERE UserId = @UserId
INSERT INTO dbo.UserLoginToday
(UserId, UserLoginPerDay)
VALUES (@UserId, @CurrentDateTime)
END
最佳解决方案是-
CREATE PROCEDURE loginProc
@UserId uniqueidentifier
AS
BEGIN
INSERT INTO dbo.UserLoginToday
(UserId, UserLoginPerDay)
VALUES (@UserId, GETDATE())
END
解释:
一,。删除了
@CurrentDateTime
参数,因为它不需要从应用程序端传递
二,。无需将当前日期和时间分配给变量,然后在insert语句中使用它,因为我们可以在insert语句中直接使用它作为
GETDATE()
三,。无需从
dbo.aspnet\u users
中找到UserId
,然后将其分配给参数变量,并在insert语句中使用它。我们已经将UserId
值作为参数@UserId
从应用程序端传递过来,可以直接在insert语句中使用。进行了哪些更改?为什么?CREATE PROCEDURE loginProc
在顶部,当变量可以直接使用时,没有将GETDATE()
放入变量中。@m hasan,当您在@UserId
参数中有值时,从dbo.aspnet\u Users
中选择UserId
有什么用呢?很抱歉延迟,我在C#代码中调用过程时遇到了一些问题,花了一些时间来解决。然后我尝试了你的程序,效果非常好。谢谢你的帮助!我仍然有一个小问题,如果我使用一个已经登录过一次的用户登录(因此有一个已经在表中的用户ID),它将不会在表中添加另一条记录。我能做些什么来解决这个问题?为什么要从dbo.aspnet\u Users中选择UserId,其中@UserId=UserId?如果已经有UserId作为参数,为什么要从表中选择相同的值!?