我正在winforms c#上制作测验应用程序。问答作为表单加载加载到表单中。我在表格中有一个“下一步”按钮,当一个问题完成时,使用下一个按钮并转到下一个问题。现在我想根据他/她的登录来保存该用户的会话。当用户登录时,session
启动,不幸的是,如果Form Closed
用户再次登录,那么session
将启动,session
关闭的地方(意味着旧情况)不是新的......注意:“我正在使用 Windows SQL SERVER 2008 R2
”.. 提前致谢..
问问题
1016 次
1 回答
0
从它的声音来看,当用户单击“下一步”按钮时,您的测验应用程序会将用户答案写入数据库。大概答案将记录在一个表中,其中有一列供用户 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;
}
存储当前会话变量的方法。可以在 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();
}
}
}
于 2013-08-22T11:38:12.263 回答