То, что я пытаюсь сделать, это захватить текущее имя пользователя и сравнить его с базой данных, которая содержит пользователей, а также включает флаг Active и флаг администратора. Я хочу сравнить текущего зарегистрированного пользователя в таблице tbl_Person и их соответствующих пользователей в таблице, чтобы увидеть, отмечены ли они как Active и Admin. Если оба они верны, они получают доступ к странице администратора. У меня есть до сих пор, что не работает. Некоторые из них я знаю, почему, а некоторые нет. Я думаю, что нахожусь на правильном пути, что, как я сказал, я уверен, что я делаю это неправильно. Я знаю, что вы используете ExecuteScalar(), чтобы возвращать что-то вместе с OUTPUT в строке запроса, но не могли заставить это работать. Другая вопиющая проблема заключается в том, что я пытаюсь вернуть целые числа, когда имя пользователя является строкой, а активные и админ-флаги - это Bools. Я знаю, что у меня только Актив, есть момент. Я пытался заставить это работать, прежде чем добавлять что-то еще.Сравнение с значением базы данных
Я прочитал, что с помощью ExecuteScalar вы можете анализировать и преобразовывать ToString, но это не сработало, и я нашел доказательства того, что это может быть неправильной задачей, но я действительно не уверен.
У меня есть несколько разных ошибок. Введите ошибки, недопустимый столбец, когда я попытался выполнить OUTPUT. С OUTPUT я пробовал как только OUTPUT, и потому, что я знаю, когда возвращаюсь после вставки, вы вставляете insert.name. Я попробовал selected.name как догадка, но это не сработало.
Я думал, что, если я вытащил информацию, объединил их, а затем сделал сравнение, что это будет делать то, что я хочу, но я открыт для других предложений. Благодарю.
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HSEProjRegConnectionString1"].ConnectionString);
conn.Open();
SqlCommand sqlUserName = new SqlCommand("SELECT [username] FROM [tbl_Person]", conn);
SqlCommand sqlActive = new SqlCommand("SELECT [active] FROM [tbl_Person]", conn);
int result1 = ((int)sqlUserName.ExecuteScalar());
int result2 = ((int)sqlActive.ExecuteScalar());
string userInfo = result1 + "." +result2;
string userName = userName + "." +result2;
if (userInfo == userName)
{
Woo, you have access.
}
else
{
Sorry, but no.
}
Запрос также не является окончательным. Как только он будет работать, я изменю его на параметризованный запрос.
Вам нужно вернуться к основам SQL и клиентских библиотек SQL. Вероятно, вы хотите, чтобы предложение WHERE выбрало только одну строку из таблицы. 'ExecuteScalar()' - это когда запрос возвращает одно значение, например. 'select count (*) from ...', в противном случае он вернет первый столбец первой строки набора результатов. В вашем случае это будет флаг 'username' и' active' из существенно произвольно выбранной строки. Также не являются 'int'. – millimoose
Голосование закрывается как TL, так как с кодом больше неправильного. Соберите свои мысли в первую очередь и дойдете до точки, когда вы знаете, что проблема * one *, * specific *, которая блокирует ваш прогресс прямо сейчас, и задайте вопрос, где демонстрируется эта одна проблема. (Включая сообщения об ошибках и т. Д.) Вместо того, чтобы размещать блок по существу бессмысленного кода и просить кого-то выпрямить то, что вы догадываетесь, но не совсем точно определили проблемы. – millimoose
И как, черт возьми, я хотел сделать это без какого-либо руководства? Я не прошу людей исправить это для меня, но чтобы помочь мне, где я ошибаюсь. – Trido