2016-04-09 8 views
0

データベースに2つのテーブルがあります.1つはGUIDを生成するユーザの詳細とログイン詳細のためのテーブルです。私は前回ログアウト時にユーザの変更のために、このクエリ内のすべてのログアウト時間をユーザー名を取っているとき、私はこのクエリ他のテーブルのデータベースで1つのテーブルのデータを使用する方法

 SqlConnection conlog = new SqlConnection(ConfigurationManager.ConnectionStrings["loginConnectionString"].ConnectionString); 
     conlog.Open(); 
    Session["New"] = null; 
    string idQuery = "Select ID from [Table] where Username='"+Label1.Text+"'"; 
    SqlCommand idd = new SqlCommand(idQuery, conlog); 
    string strQuery = "update logindata set LogoutTime='"+DateTime.Now+"' where UserName='"+Label1.Text+"' "; 
    SqlCommand cmd = new SqlCommand(strQuery, conlog); 

    DateTime.Now.ToString()); 
    cmd.ExecuteNonQuery(); 
    Response.Redirect("Loginform.aspx"); 
     conlog.Close(); 

ているユーザーのGUIDを取るにはどうすればよいです。

これはログアウトの詳細のスクリーンショットである:

+0

テーブルのログデータに重要な情報が欠落しています。作成した新しいレコードには、ユーザーのセッションを識別する固有のSessionIDも格納する必要があります。その後、ログアウト情報を書き込む必要があるときは、そのセッションIDを使用して、そのユーザセッションの一意のレコードをテーブル内に特定する必要があります。 – Steve

答えて

0

コードのこの部分:

update logindata 
set LogoutTime=NEW_DATE 
where UserName=USER_NAME; 

は言う:USER_NAMEに等しいユーザ名にすべてのレコードについてNEW_DATEにLogoutTimeを設定。

ただし、1つのレコードのみを更新したいので、特定のログイン詳細を特定する必要があります。あなたはのSessionIdが、あなたはユーザ名でcomparsionを削除することができますユニークであることを保証することができる場合

update logindata 
set LogoutTime=NEW_DATE 
where SessionId=SESSION_ID and UserName=USER_NAME; 

:最も簡単な解決策はのSessionId /ログインIDなどでカラムを追加して、照会を変更することです。

別の解決策は、例えば、最新のLoginTimeでのみレコードを更新することです:あなたは新しい列をこのように追加する必要はありません

update logindata 
set LogoutTime=NEW_DATE 
order by LoginTime desc 
limit 1; 

+0

logindataテーブルのユーザー詳細テーブルからguIDをどのように正確に使用しますか。私はこれに新しいです..そして私はこのプロジェクトを悲しまなければなりません。 –

+0

IDでユーザを検索するには、 'idd'からIDを抽出して' strQuery'に入れる必要があります。しかし、guid_を正しく理解しているかどうかはわかりません。 – nobody

0

ログアウトの詳細テーブルにユーザーごとに複数のレコードを保存するため、新しいフィールドsay(SessionID)を追加するか、既存のログイン時間を使用するかのいずれかでのみ、選択したレコードを更新する方法を指定する必要があります。下記の例の更新を参照してください。

// Uncomment next line and update LoginTime variable to hold your Login Time as you inserted in Login Tables upon user login. 
// LoginTime = 
SqlConnection conlog = new SqlConnection(ConfigurationManager.ConnectionStrings["loginConnectionString"].ConnectionString); 
conlog.Open(); 
Session["New"] = null; 
string idQuery = "Select ID from [Table] where Username='" + Label1.Text + "'"; 
SqlCommand idd = new SqlCommand(idQuery, conlog); 
string strQuery = "update logindata set LogoutTime='" + DateTime.Now + "' where UserName='" + Label1.Text + "' AND LoginTime = '" + LoginTime + "'"; 
SqlCommand cmd = new SqlCommand(strQuery, conlog); 

DateTime.Now.ToString()); 
cmd.ExecuteNonQuery(); 
Response.Redirect("Loginform.aspx"); 
conlog.Close(); 
+0

同時にログインするすべてのユーザーのログアウト時間が変更されることはありません。 –

+0

いいえクエリーには、UserNameの場合はWhere Clause、LoginTimeの場合は1つの条件の2つの条件があります。つまり、同じユーザーの複数のレコードがまったく同時に許可されない場合は、1つのレコードのみが更新されます。 –

+0

大丈夫ありがとうございます...私はこのコードを試して、あなたに伝えます。 –