无法检索行值?

时间:2015-07-21 15:35:22

标签: c# mysql asp.net tableadapter

我使用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,唯一或外键约束的值。

1 个答案:

答案 0 :(得分:0)

请考虑以下两个帐户:

  

用户名:john.smith,电子邮件:John.Smith@Email.com

     

用户名:John.Smith@Email.com,电子邮件:JohnSmith2@Email.com

您的查询将返回两行。首先要检查一下,如果没有解决它,你可以发布userInfoTableAdapters.getUserSalt(emailOrUsername)的内容以及堆栈跟踪吗?