Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在visual studio中使用本地数据库创建登录应用程序_C#_Database_Login_Local - Fatal编程技术网

C# 在visual studio中使用本地数据库创建登录应用程序

C# 在visual studio中使用本地数据库创建登录应用程序,c#,database,login,local,C#,Database,Login,Local,我在用C#创建一个简单的登录应用程序时遇到了麻烦。我只想创建一个登录表单,每当我输入用户名和密码时,它都会从数据库中检查它是否存在,因为我对此不太了解,所以我无法做到这一点 我在VS express中创建了一个windows窗体,并使用用户名和密码文本框以及登录按钮设置了设计。然后我向我的项目中添加了一个新元素,并选择了本地数据库(dataset)。在左边,我有两个区域:一个是命名数据连接,其中包含“database1.sdf”,另一个是“datasource”,其中包含“database1”。

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

我在VS express中创建了一个windows窗体,并使用用户名和密码文本框以及登录按钮设置了设计。然后我向我的项目中添加了一个新元素,并选择了本地数据库(dataset)。在左边,我有两个区域:一个是命名数据连接,其中包含“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
是否会导致错误,但我使用它是因为我不想让我的代码有太多的代码片段。 对于
连接字符串类

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

我使用一个数据库来读取多个表

Read-或者使用有人捐赠给社区的这个模板应用程序,上面的链接就是很好的例子。我想进一步补充,如果这是一个专业的解决方案,请确保您加密的密码。你不想让这个本地的用户名和原始密码数据库到处乱跑。第一个链接不是我想要做的,第二个链接,我不明白他是怎么做到的。我只是想要一个简单的代码来了解步骤。他的代码有点高级,我甚至看不到要插入数据库或从数据库中检查的查询在哪里,或者他在代码中打开与数据库连接的部分在哪里/对于if语句,可以使用:frmDashboard db=new frmDashboard();db.Show();this.Hide();