Как читать данные из базы данных с помощью SQL datareaders
Всем привет
У меня есть хранимая процедура, которая регистрирует пользователя и извлекает некоторые данные из нескольких таблиц, когда я тестирую процедуру с тестовыми данными, она возвращает все необходимые мне поля, но в моем приложении, когда я использую datareader для извлечения этих значений, я получаю исключение индекса вне диапазона.
Я использовал свойство"C#" >reader.VisibleFieldCount, чтобы подсчитать, сколько полей возвращается, и оказалось, что я возвращаю только 3 из 8 полей.
Любая помощь будет оценена по достоинству
С уважением
Что я уже пробовал:
вот моя хранимая процедура
ALTER PROCEDURE [dbo].[spCustomerLogin] @Email nvarchar(Max), @Password nvarchar(Max) AS SET NOCOUNT ON SELECT Customer_name,CUSTOMER_PROFILE_DATA.Customer_email,Customer_password,Customer_phone,Card_number as 'crd_num',Card_expmnth,Card_expyear,Card_cvc FROM CUSTOMER_PROFILE_DATA join CARD_INFO on CARD_INFO.Customer_email = CUSTOMER_PROFILE_DATA.Customer_email WHERE (CUSTOMER_PROFILE_DATA.Customer_email =@Email) AND (Customer_password = @Password) RETURN
Мой код читателя
while(reader.Read() && reader.VisibleFieldCount > 5) { Response.Redirect("ProfileC.aspx", false); Session["Cus_name"] = Convert.ToString(reader[0]); Session["Cus_email"] = Convert.ToString(reader[1]); Session["Cus_pass"] = Convert.ToString(reader[2]); Session["Cus_phone"] = Convert.ToString(reader[3]).ToString(); Session["Card_num"] = Convert.ToString(reader[4]); Session["Card_expmnth"] = Convert.ToString(reader[5]); Session["Card_expyr"] = Convert.ToString(reader[6]); Session["Card_cvv"] = Convert.ToString(reader[7]); }
Richard MacCutchan
Вы серьезно храните идентификатор пользователя и пароль в открытом тексте в базе данных?
Garvin12
нет, пароль зашифрован.
Andy Lanng
Garvin12
кощунственный
Richard MacCutchan
Просто спрашиваю; мы видим так много людей, хранящих их в открытом тексте.
Richard Deeming
Шифрование паролей почти так же плохо, как и хранение их в виде обычного текста. Если ваш ключ шифрования скомпрометирован, то и все ваши пароли тоже.
Вы должны всегда хранить только соленый хэш пароля, используя уникальную соль для каждой записи.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]
Richard Deeming
Кроме того, похоже, что вы храните данные кредитной карты в своем столе. Надеюсь, они не хранятся в обычном тексте?
Garvin12
Я понимаю, что вы имеете в виду, спасибо за ссылки.