如何在登录windows窗体c中使用sestion

本文关键字:sestion 窗体 登录 windows | 更新日期: 2023-09-27 18:28:47

我正在winforms c#上制作Quiz应用程序。问答作为形式负载加载到形式中。我在表格中有一个"下一步"按钮,当一个问题完成时,按下"下一个"按钮并转到下一个问题。现在我想在他/她的登录的基础上保存该用户的会话。当用户登录时,session启动,不幸的是,如果Form Closed和用户再次登录,则session将启动,其中session关闭(表示旧情况)而不是新情况。。。注意:"我正在使用Windows SQL SERVER 2008 R2"。。提前感谢。。

如何在登录windows窗体c中使用sestion

当用户单击"下一步"按钮时,您的问答应用程序会根据声音将答案写入数据库。假设答案将记录在一个表中,其中一列用于引用用户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

上述查询将返回JoeBlogs用户最近回答的问题。

编辑:下面是用于存储和恢复会话变量的未经测试的代码。代码假设您有一个名为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;
    }

方法来存储当前会话变量。可以在Form.Clossing事件上调用。

    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();
            }
        }
    }