2016-02-01 3 views
0

Я создаю оконное приложение с использованием базы данных sql. Я хочу проверить, был ли пользователь уже зарегистрирован через мое оконное приложение, если мое приложение закрывается без выхода из базы данных, способной обнаружить, что пользователь вышел из системы. Для этого я создаю таблицу, используя имя пользователяПроверьте, что пользователь уже зарегистрировался через оконное приложение

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

Перед входом в игру я имею проверки таблицы

DataTable dt = sqlda.GetQueryData("Select * From TempDB.DBO.SysObjects Where Name='##" + username.ToUpper() + "'"); 

Но после того, как форма Войти близко таблицы также будут удалены.

+0

После формы войти закрытия. таблица удалена? – progrAmmar

+0

, который я создал с использованием имени пользователя –

+0

username = "'; DTOP TABLE TempDB.DBO.SysObjects; -"; –

ответ

0

Глобальные временные таблицы (##) удаляются, когда все пользователи ссылаются на эту таблицу, поэтому - в вашем случае таблицы основаны на имени пользователя, чтобы они были удалены.

Если имена пользователей уникальны, вы, в свою очередь, можете написать запись при входе в таблицу. В свою очередь, когда пользователь выходит из системы, удалите запись. У вас есть другая задача, выполняющая проверку таблицы temp против каждой записи входа.

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; 
Смежные вопросы