在 Visual Studio 中使用本地数据库创建登录应用程序

问题描述 投票:0回答:3

拜托,我在用 C# 创建一个简单的登录应用程序时确实遇到了麻烦。我只想创建一个登录表单,每当我输入用户名和密码时,它都会从数据库中检查它是否存在,并且由于我对此了解不多,所以我无法做到这一点!

我在VS Express中创建了一个Windows窗体,并设置了用户名和密码的文本框以及登录按钮的设计。然后我向我的项目添加了一个新元素并选择本地数据库(数据集)。在左侧,我有两个区域:一个命名数据连接,其中包含“database1.sdf”,另一个区域为“datasource”,其中包含“database1”。我不知道这两个区域是什么意思,我刚刚在其中创建了一个新的用户表“database1.sdf”并添加了 id、用户名和密码列。但在那之后,只有这两个元素,我不知道如何执行我想做的事情。我应该编写什么代码来连接到数据库以检查值,以及在哪里编写此代码?

我在网上尝试了很多代码,但不起作用:/

如果我的问题看起来很愚蠢,我很抱歉,但我真的需要你的帮助!谢谢!

c# database authentication local
3个回答
0
投票

这是我作为程序员为我们的专业主题中的系统项目所做的 Visual Studio C# 编码的片段

private void btnLogin_Click(object sender, EventArgs e)
        {// you can have the database location at your own database
            SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=H:\school\copro3\EnrollmentSystemProgram\EnrollmentSystemProgram\Login.mdf;Integrated Security=True;");

//您可以将数据库表及其内容用于 DataAdapter

            SqlDataAdapter sda = new SqlDataAdapter("SELECT COUNT (*) FROM tblLogin WHERE Username= '" + txtUser.Text + "' AND Password= '" + txtPass.Text + "'", con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            if (dt.Rows[0][0].ToString() == "1")
            {
                this.Hide();
                new frmDashboard().Show();

            }
            else
            {
                lblNotify.Show();
                lblNotify.Text = "Login Unsuccessful";
                txtUser.Text = "";
                txtPass.Text = "";
            }
        }

        private void frmLogin_Load(object sender, EventArgs e)
        {
            lblNotify.Hide();
        }

0
投票

不要这样做

SELECT COUNT (*) FROM tblLogin WHERE Username= '" + txtUser.Text + "' AND Password= '" + txtPass.Text + "'"

这会导致漏洞利用

将用户名存储在像

Username = @Username
这样的变量中,然后使用

sqlCommand.Parameters.AddWithValue("@Username", txtUser.Text);

0
投票

这是我为我们的程序论文插入的登录按钮代码

string select = @"Select * From tblUsers Where Username = @Username and Password = @Password and PositionInTheCompany = @Privilege";
        using (con)
        {
            con.Open();
            using (cmd = new SqlCommand(select, con))
            {
                cmd.Parameters.AddWithValue("@Username", txtLoginUsername.Text);
                cmd.Parameters.AddWithValue("@Password", txtLoginPassword.Text);
                cmd.Parameters.AddWithValue("@Privilege", cmbLoginUsertype.Text);
                using (read = cmd.ExecuteReader())
                {
                    if (read.HasRows)
                    {
                        // you can also use the else if statements here for the user privileges
                        read.Read();
                        this.Hide()
                        dashboard.Show();

                        txtLoginPassword.Text = "";
                        txtLoginUsername.Text = "";
                        cmbLoginUsertype.Text = "";
                    }
                    else
                    {
                        lblLoginMessage.Show();
                        lblLoginMessage.Text = "Access Denied!";
                        txtLoginPassword.Text = "";
                        txtLoginUsername.Text = "";
                        cmbLoginUsertype.Text = "";
                    }
                }
            }
        }

对于 SqlConnection,我使用了一个名为 ConnectionString 的类

 public partial class frmLogin : Form
{
    ConnectionString cs = new ConnectionString();
    frmDashboard dashboard = new frmDashboard();
    public SqlConnection con = new SqlConnection();
    public SqlCommand cmd = new SqlCommand();
    public SqlDataReader read;

    public frmLogin()
    {
        InitializeComponent();
    }

    private void frmLogin_Load(object sender, EventArgs e)
    {
        lblLoginMessage.Hide();
        con = new SqlConnection(cs.conStr);
    }

我不知道使用

class
进行连接是否会导致错误,但我使用它是因为我不想让我的代码有很多片段。 对于
ConnectionString class

class ConnectionString
{
    public string conStr = // the connection source of the database
}

我对多个表使用一个数据库

© www.soinside.com 2019 - 2024. All rights reserved.