将文本框值与数据库进行比较

时间:2016-12-03 14:57:15

标签: c# database linq

所以,我正在为我的一个班级做一个项目。第一部分是登录表单,要求用户输入用户名和密码。当点击登录按钮时,程序将比较文本框文本与数据表中的内容。唯一的问题是,我很难做到这一点。我尝试使用LINQ语句,但这使得值与我调试时的预期不同。我在这里做错了吗? 下面是表格的代码。

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)
    {

    }
}
}

SortingClass是一个用于对数据表进行排序的类,但这是稍后的时间。 UserShowDBEntities是数据库本身。

2 个答案:

答案 0 :(得分:1)

我不是LINQ to SQL的用户,但我相信以下内容适合您。

基本上,我做了以下更改: 1.将用户名和密码检查合并到一个WHERE子句中 2.如果您获得匹配的记录(即Enumerable.Count检查),则表示用户名和密码与记录匹配,因此是正确的。

in_category

答案 1 :(得分:0)

我希望您的数据源已填满,并且您的密码未在数据库中加密。

var user = dbcontext.UserTables.FirstOrDefault( u => u.UserName == textBox1.Text && u.UserPassword == textBox2.Text);

if(user != null)
   // Check
else
  // Failed

如果textBox1是用户名而textBox2是密码,则应该有效。