2015-07-21 67 views
0

我正在使用TableAdapter建立連接並通過我的數據庫表進行查詢。我有這個疑問:無法檢索行值?

SELECT salt FROM users WHERE (username = @usernameOrEmail) OR (email = @usernameOrEmail) 

,你可以想像,因爲用戶名和電子郵件字段是唯一的,只能取回1行,該行可以爲空或實際上可以包含具體取決於該usernameOrEmail參數有鹽匹配任何用戶名或電子郵件

我使用此代碼來調用查詢,並通過傳遞參數:

public void checkEmailOrUsername(string emailOrUsername) 
{ 
    DataTable userDataTable = userInfoTableAdapters.getUserSalt(emailOrUsername); 
    DataRow userDataRow = userDataTable.Rows[0]; 
    string saltValue = userDataRow["salt"].ToString(); 
} 

它完美,當參數沒有在表中匹配一個用戶名或電子郵件然而破壞時的電子郵件或用戶名呢火柴。它給出了一個錯誤在這條線:

DataTable userDataTable = userInfoTableAdapters.getUserSalt(emailOrUsername); 

這是錯誤:

An exception of type 'System.Data.ConstraintException' occurred in System.Data.dll but was not handled in user code

Additional information: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

+0

對於TA中沒有設置爲空的列,是否返回空值? – DavidG

+0

SALT列不爲空@DavidG – mogorilla

+0

您可以發佈您的GetUserSalt方法嗎?可能你的填充DT的方法有錯誤,等等。 – Dylan

回答

0

這不是一定會返回一個單一的鹽。考慮以下兩個帳戶:

Username: john.smith, Email: [email protected]

Username: [email protected], Email: [email protected]

您的查詢將返回兩行。首先要檢查的是,如果這不能解決問題,你可以發佈userInfoTableAdapters.getUserSalt(emailOrUsername)的內容以及堆棧跟蹤嗎?

+0

我忘了提及,用戶名不能包含@符號或點。我已驗證客戶端和服務器端都不允許將這些字符存儲爲用戶名。用戶名只支持字母,數字,連字符和下劃線 – mogorilla