2013-05-03 4 views
0

로그인 페이지에이 코드를 작성했습니다. 내 코드는 오류가 없지만 데이터베이스에 업데이트 쿼리가 적용되지 않습니다.
주먹 쿼리가 작동하고 index.aspx으로 리디렉션되지만 업데이트 쿼리 (두 번째 쿼리)가 적용되지 않습니다 !!!!데이터베이스에서 내 업데이트 쿼리가 작동하지 않습니다.

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     Database db1 = new Database(); 
     string query = "select * from Admins where [email protected] and cast(Password as varbinary)=cast(@password as varbinary)"; 
     SqlCommand smd = new SqlCommand(query, db1.sc); 
     smd.Parameters.AddWithValue("@username", txtUsername.Text); 
     smd.Parameters.AddWithValue("@password", General.CreatePasswordHash(txtPassword.Text)); 
     SqlDataReader sdr = smd.ExecuteReader(); 
     smd.Parameters.Clear(); 
     if (sdr.Read()) 
     { 
      Session.Add("username", sdr[0].ToString()); 
      string nowEnter = sdr[5].ToString(); 
      query = "update Admins set [email protected], [email protected] where [email protected]"; 
      string now = General.getPersianDateNow() + " ساعت " + General.getPersianTimeNow(); 
      smd.CommandText = query; 
      smd.Parameters.AddWithValue("@lastEnter", nowEnter); 
      smd.Parameters.AddWithValue("@nowEnter", now); 
      smd.Parameters.AddWithValue("@username", sdr[1].ToString()); 
      sdr.Close(); 
      smd.ExecuteNonQuery(); 
      Response.Redirect("~/admin/Index.aspx", false); 
     } 
     else 
     { 
      lblError.Visible = true; 
     } 
} 
+1

을 사용하여 SELECT 문을 작성하는 것입니다) 두 번? – Melanie

+2

당신은'sdr [0]'에서 세션에 대한 사용자 이름을 얻었지만'sdr [1]'에서 가져온 SQL 매개 변수에 대해서는. 그것은 독자의 두 요소 모두에 있습니까? – davmos

+0

@Melanie :'int id = smd.ExecuteNonQuery()'는 트레이스를위한 것입니다. 나는 그것을 삭제한다. –

답변

3

내 의견으로는 문제는 sdr의 색인에있다. 당신이

smd.Parameters.AddWithValue("@username", sdr[1].ToString()); 

를 사용 다음은

Session.Add("username", sdr[0].ToString()); 

두 줄을 호출 첫 번째는 어쨌든 가장 안전한 방법은 왜 smd.ExecuteNonQuery을 (하고있는 이름 colums 대신 *

+0

그 사실을 발견하고 댓글을 달았습니다. 최대 대답 -이 답변을 투표 :) – davmos

0

사용자 이름에 사용중인 값이 테이블에 있는지 확인하십시오.

또한 동일한 매개 변수를 두 번 추가합니다. SqlCommand 클래스가이를 처리 할 방법을 모르겠지만 지금 당장은 테스트 할 수 없지만 실행 사이에 매개 변수 (smd.Parameters.Clear())를 지우는 것이 좋습니다.

+0

내 코드를 봐. 나는이 명령을 9 행에 썼다! –

+0

죄송합니다. 처음에는 보지 못했습니다. 내 잘못이야. – Renan

관련 문제