繁体   English   中英

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

[英]Create a login application with local database in visual studio

请我在 C# 中创建一个简单的登录应用程序真的很麻烦。 我只想创建一个登录表单,每当我输入用户名和密码时,它都会从数据库中检查它是否存在,因为我对此知之甚少,所以我无法做到!

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

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

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

这是我作为程序员为我们的主要学科的系统项目所做的 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();
        }

不要这样做

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

这打开了漏洞利用

将用户名存储在像Username = @Username这样的变量中,然后使用

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

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

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
}

我将一个数据库用于多个表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM