2015-07-21 3 views
0

Я использую TableAdapters, чтобы установить соединение и запрос через мои таблицы базы данных. У меня есть этот запрос:Не удалось получить значение строки?

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

Что вы можете себе представить, так как имя пользователя и электронной почты поля являются уникальными можно извлекать только 1 строку, строка может быть либо NULL или фактически может содержать соль в зависимости, если параметр 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

У вас есть значения null, возвращаемые для любых столбцов, не установленных для разрешения null в вашей TA? – DavidG

+0

Столбец SALT не является NULL @DavidG – mogorilla

+0

Можете ли вы опубликовать свой метод GetUserSalt? Возможно, в вашем методе заполнения DT есть ошибка, и т. Д. – Dylan

ответ

0

Это не обязательно собирается возвращать одну соль. Используйте следующую учетную запись:

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

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

Ваш запрос вернет обе строки. Прежде всего, это нужно проверить, если это не решит, вы можете разместить содержимое userInfoTableAdapters.getUserSalt (emailOrUsername), а также трассировку стека?

+0

Я забыл упомянуть, что имя пользователя не может содержать символы @ или точки. Я проверял как клиентскую, так и серверную сторону, чтобы не допускать сохранение таких символов в качестве имени пользователя. Имя пользователя поддерживает только буквы, цифры, дефисы и символы подчеркивания. – mogorilla

Смежные вопросы