我正在使用sql数据库创建一个窗口应用程序。我想检查用户是否已通过我的窗口应用程序登录,如果我的应用程序关闭而没有注销数据库能够检测到用户已注销。 为此,我使用用户名
创建一个表[arrayController rearrangeObjects]
登录前我正在检查表
string query = "Select * From TempDB.DBO.SysObjects Where Name='##" + username.ToUpper() + "'";
using (var conn = new SqlConnection(connection))
{
using (SqlCommand command = new SqlCommand(query, conn))
{
conn.Open();
command.ExecuteNonQuery();
}
}
但登录后,关闭表也被删除了。
答案 0 :(得分:0)
当引用该表注销的所有用户都删除全局临时表(##),因此 - 在您的情况下,表是基于用户名的,因此它们将被删除。
如果用户名是唯一的,您可以在登录表时依次写入条目。当用户注销时,请删除该条目。您还有另一个正在运行的任务,它针对每个登录记录检查临时表。
PS修改你的查询,然后去看看:)它仍然非常适用于你的代码http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV333 这是我的头脑,但修改为这样的东西(你还需要加入你检查的一些登录表)
string query = "Select * From TempDB.DBO.SysObjects Where Name='##' + @UserName";
using (var conn = new SqlConnection(connection))
{
using (SqlCommand command = new SqlCommand(query, conn))
{
command.Parameters.Add(
new SqlParameter("@UserName",SqlDbType.Varchar,50) {
Value = userName.ToUpper()
);
conn.Open();
command.ExecuteNonQuery();
}
}
此外,我不确定您是否希望C#代码让登录用户进行比较 - 但这只是
System.Security.Principal.WindowsIdentity.GetCurrent().Name;