繁体   English   中英

如何在登录窗口形式C#中使用会话?

[英]how to use sesstion in login windows form c#?

我正在 上进行测验应用程序。 问题和答案作为表单加载加载到表单中。 我在表单中有一个“下一步”按钮,当一个问题完成时,请使用“下一步”按钮,然后转到下一个问题。 现在,我想根据他/她的登录名保存该用户的会话。 当用户登录时, session启动,如果Form Closed并且用户再次登录,很遗憾, session将启动, session将关闭, session关闭(表示旧情况)不是新的。注:“我正在使用Windows SQL SERVER 2008 R2 ”。 ..

从声音中,您的测验应用程序会在用户单击“下一步”按钮时将用户答案写入数据库。 假定答案将记录在一个表中,该表的一列用于引用用户ID,一列具有问题ID,另一列用于用户回答。

如果您使用的是这种表结构,那么您难道不就可以看到用户回答的最后一个问题是什么,并在他们重新登录时向用户显示下一个问题吗?

SELECT * FROM AnswersTable WHERE UserID = 'JoeBloggs' ORDER BY QuestionID DESC

上面查询返回的第一行将告诉您他们回答的最后一个问题(如果QuestionID与问题的顺序相同)。

如果不是,那么您可以在AnswerDate列中记录该表的每个答案的日期/时间,并使用此方法:

SELECT TOP 1 * FROM AnswersTable WHERE UserID = 'JoeBloggs' ORDER BY AnswerDate DESC

上面的查询将为JoeBloggs用户返回最近回答的问题。

编辑 :下面是存储和恢复会话变量的未经测试的代码。 代码假定您有一个名为UserSessions的数据库表,其中包含InsertionDate,UserID和SessionVar列。

从名为UserSessions的sql表中获取先前会话变量的方法。 用户登录时可以调用它。

    private string GetPreviousSession(string userID)
    {
        string prevSessionVar = "";
        string connectionString = "your connection string to the db goes here";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("SELECT TOP 1 SessionVar FROM UserSessions WHERE UserID = @UID ORDER BY InsertionDate DESC", connection))
            {
                command.Parameters.Add(new SqlParameter("UID", userID));

                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    prevSessionVar = reader.GetString(0);
                }
            }
        }
        return prevSessionVar;
    }

存储当前会话var的方法。 可以在Form.Closing事件上调用。

    private void StoreSessionVar(string sessionVar, string userID)
    {
        string iDate = DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss");
        string connectionString = "your connection string to the db goes here";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("INSERT INTO UserSessions (InsertionDate, SessionVar, UserID) VALUES (@IDate, @SessionVarToStore, @UID)", connection))
            {
                command.Parameters.Add(new SqlParameter("UID", userID));
                command.Parameters.Add(new SqlParameter("SessionVarToStore", sessionVar));
                command.Parameters.Add(new SqlParameter("IDate", iDate));

                SqlDataReader reader = command.ExecuteReader();
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM