2013-01-22 53 views
0

如何在登錄中獲取Id?如何在登錄中獲取ID?

我使用實體框架,並在frmLogin我有這樣的:

private bool IsValidUser(string userName, string pass) 
    { 
     Context context = new Context(); 

     var query = (from c in context.Cuentas 
        where c.Nombre == userName && c.Password == pass 
        select c); 

     return query.Any(); 
    } 

但這個功能,我只能如果用戶在數據庫驗證。

我也想得到這個用戶的ID。

回答

2

代替if(query.Any()) ....嘗試:

var user = query.FirstOrDefault(); 

if (user == null) 
    return false; 

var id = user.ID; 
+0

豈不的SingleOrDefault()不是更好嗎?我假設不應該有超過一個用戶的用戶名和密碼匹配。 –

+0

可能是真的 - 如果你不介意拋出異常---雖然有兩個匹配用戶名和密碼的記錄肯定會是一個異常情況。 (用戶名可能應該是數據庫中的唯一索引) –

+0

我在最後一行「var id = user.ID」中按F9,當我驗證id值時,它需要「0」 – gerchoG

0

我覺得可能有個相同的用戶名:)只有一個用戶=>一個用戶名=一個用戶

你可以試試這

var user = context.Cuentas.singleordefault(d=>d.userName==userName & d.password==password); 
int id; 
if (user!=null) 
{ 
    id=user.userId; 
    return true; 
} 
return false; 

EDITED

+0

兩條評論:如果密碼測試失敗,你只看用戶ID - 你更可能需要用戶ID它密碼檢查成功,尤其是因爲如果密碼失敗,你不關心這個用戶(它可能是一個黑客,並且你加載的關於用戶的任何信息都可能到達他並幫助他進行黑客攻擊)。此外,將密碼檢查從數據庫(針對這些事情高度優化)移動到代碼這是不是很優化) –

+0

它的工作原理,但我有一個全局變量「public int cuentaId」,當我嘗試這樣做:「this.cuentaId = userId;」 「cuentaid」的值是0:S – gerchoG

+0

if語句中缺少括號>>首先,我檢查密碼,如果提供pass等於使用存儲在數據庫中的pass,然後將id設置爲全局變量並返回true ...它應該糾正問題。 ..i認爲... –

相關問題