Рейтинг:
9
OriginalGriff
:вздыхать:
YouTube ВИДЕО "как кодировать безопасность" ... примерно так же полезно, как чайник из папиросной бумаги.
Прекратите пытаться писать код с YouTube - совершенно ясно, что автор абсолютно не представляет, что он делает.
Никогда не храните пароли в открытом виде: это серьезная угроза безопасности. Всегда хэшируйте их и сравнивайте хэши. Хранение паролей: как это сделать.[^] объясняет - код написан на C#, но это довольно очевидная вещь.
Без вашего участия UsersTableAdapter.LoginQuery
код мы не можем точно сказать, что там происходит, но ошибка подразумевает, что тот или иной из ваших параметров неверен - система пытается привести его к Boolean
значение до того, как он передаст его в SQL.
Arnav Varshney
В UsersTableAdapter.LoginQuery-это тот, который я разместил как "мой запрос:" здесь!
И я всего лишь ребенок, создающий какую-то случайную программу, поэтому мне и в голову не пришло хэшировать эти пароли!
OriginalGriff
Нет, это не так. Это VB - код, который говорит SQL выполнить этот запрос, а не сам запрос!
Даже новичкам нужно с чего - то начинать-и гораздо, гораздо легче с самого начала приобрести хорошие привычки, чем пытаться сломать плохие, как только они установятся. Поэтому просмотр видео другими людьми, которые не знают, что они делают, не поможет вам в долгосрочной перспективе, это усложнит вашу жизнь.
Вместо этого возьмите книгу или лучше пройдите курс - они представляют материал в структурированном виде, чтобы вы не пропустили важные вещи (например, SQL-инъекцию, основы безопасности и т. д.), которые впоследствии могут значительно облегчить вашу жизнь.
Arnav Varshney
И все же, есть ли способ заставить его работать?
Richard Deeming
Просматривая видео, он возвращает дополнительную колонку в начале своего запроса - Customer_ID
.
Похоже, что сгенерированный метод запроса просто возвращает значение первого столбца первой строки, возвращенной из запроса. В его случае, это анекдот. Integer
; в вашем случае это String
.
Тогда он полагается на неявное принуждение типа VB - чрезвычайно плохая вещь! - для преобразования Integer
К Boolean
: 0
будет преобразован в False
, и все остальное превратится в True
.
В вашем коде, потому что вы возвращаете a String
, и он не содержит ни того, ни другого "True"
или "False"
, его нельзя принудить к тому, чтобы Boolean
, и вы получаете ошибку времени выполнения.
Быстрое и грязное исправление состоит в том, чтобы проверить, возвращает ли метод запроса Nothing
:
If UsersTableAdapter.LoginQuery(user, pass) IsNot Nothing Then
MsgBox("User Authenticated!")
Else
MsgBox("Invalid Credentials!")
End If
Но, как сказал Грифф, автор этого видео явно не знает, что он делает, и не является хорошим источником для изучения. :)
(И вы всегда должны компилировать с помощью Option Strict
включен, что дало бы вам ошибку времени компиляции вместо ошибки времени выполнения.)
Arnav Varshney
Большое спасибо!