检查用户是否已通过窗口应用程序登录

时间:2016-02-01 08:51:37

标签: c# sql-server windows

我正在使用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();
    }
}

但登录后,关闭表也被删除了。

1 个答案:

答案 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;