Примечание: см. Комментарии, в которых экранируются User
и Password
.
Первое, что мы должны рассмотреть здесь: параметры.Прямо сейчас, если имя пользователя / пароль содержат диапазон символов, могут произойти очень плохие вещи;итак:
command.CommandText = "select * from DataData where [User]=@cn and [Password]=@pw";
command.Parameters.Add(new OleDbParameter("@cn", text_Username.Text));
command.Parameters.Add(new OleDbParameter("@pw", text_Password.Text));
Проблема следующая - это пароли в виде простого текста, но это огромная область - просто ... никогда не храните пароли в виде текста ... никогда.
Теперь я собираюсь предположить, что вышеприведенное не исправляет это;если это так, вам нужно проверить, как User
и Password
определены в базе данных.Сообщение об ошибке указывает на то, что одно из них не очень похоже на текст.
В этом коде также много проблем с using
и т. Д., Которые могут привести к странным ошибкам, связанным с "открытый читатель "и т. д .;если возможно, я настоятельно рекомендую такой инструмент, как Dapper, который значительно облегчит получение правильного кода.Например:
var userIds = connection.Query<string>(
"select [User] from DataData where [User]=@cn and [Password]=@pw",
new { cn = text_Username.Text, pw = text_Password.Text }).AsList();
switch(userIds.Count) {
case 0: // TODO: doesn't exist
case 1: // TODO: perfect
break;
default: // TODO: oops, multiple users
break;
}