Итак, я работаю над проектом для моего класса. Первая часть - это форма входа, которая требует, чтобы пользователь вводил имя пользователя и пароль. Когда нажата кнопка входа в систему, программа должна сравнить текст текстового поля с тем, что находится в datatable. Проблема только в том, что мне сложно это делать. Я попытался сделать это с помощью операторов LINQ, но это сделало значения отличными от того, что я ожидал, когда я пошел его отлаживать. Я здесь что-то не так? Heres код для формы.Сравнение значений текстового поля с базой данных
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Entity;
using System.Data.Entity.Validation;
namespace mcshonsey_Final
{
public partial class LoginForm : Form
{
SortingClass sort = new SortingClass();
mcshonsey_FinalProject.UserShowDBEntities dbcontext = null;
public LoginForm()
{
InitializeComponent();
textBox1.Text = "";
textBox2.Text = "";
textBox1.Focus();
}
private void button1_Click(object sender, EventArgs e)
{
if (dbcontext != null)
dbcontext.Dispose();
dbcontext = new mcshonsey_FinalProject.UserShowDBEntities();
dbcontext.UserTables
.OrderBy(entry => entry.UserID)
.Load();
if (string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("You must enter a password or username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Focus();
}
/*else
{
ShowSelectForm ssf = new ShowSelectForm(this, sort);
Hide();
ssf.Show();
}*/
string num1 = Convert.ToString(textBox1.Text);
string num2 = Convert.ToString(textBox2.Text);
var user =
from use in dbcontext.UserTables
where use.UserName == num1
select use;
var user2 =
from pas in dbcontext.UserTables
where pas.UserPassword == num2
select pas;
if (textBox1.Text.Equals(user) && textBox2.Text.Equals(user2))
{
ShowSelectForm ssf = new ShowSelectForm(this, sort);
Hide();
ssf.Show();
}
else
{
MessageBox.Show("Incorrect username and/or password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Focus();
}
}
private void button2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Are you sure you want to quit?", "Exit", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Application.Exit();
}
}
private void LoginForm_Load(object sender, EventArgs e)
{
}
}
}
The SortingClass класс для сортировки через DataTable, но это на более позднее время. UserShowDBEntities - это сама база данных.
«Я попытался сделать это с помощью операторов LINQ, но это сделало значения отличными от того, что я ожидал». Хорошо, расскажи нам, чего ты ожидал и что у тебя на самом деле. – ChrisF
Также почему вы вызываете 'Convert.ToString' то, что уже является строкой? – ChrisF
Я ожидал, что пользователь и user2 будут такими же, как значения имени пользователя и пароля текстовых полей. Вместо этого он вышел как-то вроде этого:... + \t \t пользователь \t {ВЫБОР [Extent1] [Идентификатор_пользователя] AS [Идентификатор_пользователя], [Extent1] [UserName] AS [UserName], [Extent1] [UserPassword] AS [UserPassword] FROM [dbo]. [UserTable] AS [Extent1] WHERE [Extent1]. [UserName] = @ p__linq__0} \t System.Linq.IQueryable {System.Data.Entity.Infrastructure. DbQuery } –