从DB

时间:2017-07-18 10:58:08

标签: c# sql visual-studio visual-studio-2012 user-input

我在下面的代码中有用户登录表单(用户名和密码)我希望它检查用户和通行证是否存在于数据库中,但是当输入用户并通过它时,我无法访问form2总是我得到一个错误登录消息我认为没有与数据库的连接或它没有读取if条件?

我的表名是帐号,包含两列(user,pass) 数据库名称Database1。

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;

namespace testdb
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    string cs = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;";


    private void button1_Click(object sender, EventArgs e)
    {

        try
        {
            SqlConnection cn = new SqlConnection(cs);
            SqlCommand cmd = new SqlCommand("Select * from account where user=@username and Pass=@password", cn);
            cmd.Parameters.AddWithValue("@username", textBox2.Text);
            cmd.Parameters.AddWithValue("@password", textBox1.Text);

            cn.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            cn.Close();
            int count = ds.Tables[0].Rows.Count;
            if (count == 1)
            {

                Form2 form2 = new Form2();
                this.Hide();
                form2.Show();
            }
            else
            {
                MessageBox.Show("Invalid Login please check username and password");
            }
            cn.Close();
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        }

}

}

这一行

 SqlConnection cn = new SqlConnection(global::testdb.Properties.Settings.Default.Database1ConnectionString);

我把它改成了

string cs = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;";

注意:它存在于visual studio中的db意味着我正在使用visual studio附带的数据库,我已经使用用户名定义了表帐户并传递了

这是我的问题,即使用正确的用户名和密码,我收到错误消息 enter image description here

这里我的数据库进入了VS. enter image description here

其他快照可以在我的回复中找到

1 个答案:

答案 0 :(得分:0)

登录时,系统基本上要求用户告诉它两件事:

  • 这就是我(用户名,电子邮件地址等)和
  • 这就是我所知道的(密码)

因此,当您从用户那里评估此输入时,您应该以相同的方式执行此操作;也就是说首先检查用户的身份(我是谁),然后比较密码(我所知道的)。

考虑以下示例:

protected void btnLogin_Click(object sender, EventArgs e)
{
    try
    {
        SqlConnection cn = new SqlConnection(cs);
        SqlCommand cmd = new SqlCommand("Select * from account where user=@username", cn);
        cmd.Parameters.AddWithValue("@username", textBox2.Text);

        cn.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        cn.Close();

        if (ds.Tables[0].Rows.Count == 1)
        {
            // A user with this username exists, check the password.
            if (ds.Tables[0].Rows[0][1] == textBox1.Text)
            {
                // The login succeeded, show Form2.
                Form2.Show();
            }
            else
            {
                MessageBox.Show("Invalid Login please check username and password");
            }
        }
        else
        {
            // No user with the given username exists.
            MessageBox.Show("Invalid Login please check username and password");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

如果没有指定用户名的用户,您将获得"无效登录"错误。

如果用户登录的密码与数据库中的密码不匹配,您将获得"无效登录"错误。

如果系统无法连接到数据库,您将收到来自catch阻止的错误消息。

如果一切顺利,应在用户登录时显示Form2。