我使用TableAdapter通过我的数据库表建立连接和查询。我有这个问题:
SELECT salt FROM users WHERE (username = @usernameOrEmail) OR (email = @usernameOrEmail)
您可以想象,因为用户名和电子邮件字段是唯一的,它只能检索1行,该行可以是NULL或实际上可以包含salt,具体取决于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);
这就是错误:
类型' System.Data.ConstraintException'的例外情况发生在System.Data.dll中但未在用户代码中处理
其他信息:无法启用约束。一行或多行包含违反非null,唯一或外键约束的值。
答案 0 :(得分:0)
请考虑以下两个帐户:
用户名:john.smith,电子邮件:John.Smith@Email.com
用户名:John.Smith@Email.com,电子邮件:JohnSmith2@Email.com
您的查询将返回两行。首先要检查一下,如果没有解决它,你可以发布userInfoTableAdapters.getUserSalt(emailOrUsername)的内容以及堆栈跟踪吗?