2012-11-20 45 views
-1

可能重複:
passing data between two forms using properties如何驗證用戶名和用戶ID傳遞

我使用下面的代碼來驗證一個WinForm應用程序的登錄。

public int Validate_Login(String Username, String Password) 
     { 

      //SqlConnection con = new SqlConnection(@"User id=judgment_day;Password=Kit$hen;Server=216.40.232.82, 2153;Database=new_judgment-system"); 
      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["rawr"].ConnectionString); 
      SqlCommand cmdselect = new SqlCommand(); 
      cmdselect.CommandType = CommandType.StoredProcedure; 
      cmdselect.CommandText = "[dbo].[prcLoginv]"; 
      cmdselect.Parameters.Add("@Username", SqlDbType.VarChar, 50).Value = Username; 
      cmdselect.Parameters.Add("@UPassword", SqlDbType.VarChar, 50).Value = Password; 
      cmdselect.Parameters.Add("@OutRes", SqlDbType.Int, 4); 
      cmdselect.Parameters["@OutRes"].Direction = ParameterDirection.Output; 
      cmdselect.Connection = con; 
      int Results = 0; 

      try 
      { 
       con.Open(); 
       cmdselect.ExecuteNonQuery(); 
       Results = (int)cmdselect.Parameters["@OutRes"].Value; 
      } 
      catch (SqlException ex) 
      { 
       lblMessage.Text = ex.Message; 
      } 
      finally 
      { 
       cmdselect.Dispose(); 

       if (con != null) 
       { 
        con.Close(); 
       } 
      } 
      return Results; 
     } 

     protected void btnlogin_Click(object sender, EventArgs e) 
     { 
      int Results = 0; 


      if (txtUsername.Text != null && txtPassword.Text != null) 
      { 



       Results = Validate_Login(txtUsername.Text, txtPassword.Text); 



       if (Results == 1) 
       { 



        lblMessage.Text = "Login is Good"; 

        this.Hide(); 
        frmSwitch frm = new frmSwitch(); 
        frm.Show(); 


       } 



       else 
       { 



        lblMessage.Text = "Invalid Login"; 

        lblMessage.ForeColor = System.Drawing.Color.Red; 



       } 



      } 



      else 
      { 



       lblMessage.Text = "Please make sure that the username and the password is Correct"; 



      } 
     } 

的SP如下:

Create Proc [dbo].[prcLoginv] 
( 
@Username VarChar(50), 
@UPassword varChar(50), 
@OutRes int OUTPUT 
) 
AS 
set @OutRes = (SELECT count(*) FROM [dbo].Log_Users 
WHERE Username = @Username And [Password] = @UPassword) 
if(@OutRes = 1) 

begin 
set @OutRes = 1--Login is Correct 
end 
else 
begin 
set @OutRes = 0 --Bad login 
end 

我將如何修改也返回用戶ID,所以我可以把它傳遞給另一種形式。我需要使用該ID來顯示誰正在處理什麼文件。

+0

您是否需要修改存儲過程以返回userId或者您在質疑如何在表單之間傳遞數據? 如果返回userId,則不需要傳回1或0,只需傳遞userId或其他-1即可。 –

回答

1

而不是

set @OutRes = (SELECT count(*) FROM [dbo].Log_Users 
WHERE Username = @Username And [Password] = @UPassword) 

你可以嘗試

select @OutRes = userid from x where blah. 

如果查詢不返回行你得到0,如果有多個排它給你的最後一個。

+0

從來沒有這個,這正是我所做的。謝謝邁克!我總是認爲這個東西= /。 – korrowan