拜托,我在用 C# 创建一个简单的登录应用程序时确实遇到了麻烦。我只想创建一个登录表单,每当我输入用户名和密码时,它都会从数据库中检查它是否存在,并且由于我对此了解不多,所以我无法做到这一点!
我在VS Express中创建了一个Windows窗体,并设置了用户名和密码的文本框以及登录按钮的设计。然后我向我的项目添加了一个新元素并选择本地数据库(数据集)。在左侧,我有两个区域:一个命名数据连接,其中包含“database1.sdf”,另一个区域为“datasource”,其中包含“database1”。我不知道这两个区域是什么意思,我刚刚在其中创建了一个新的用户表“database1.sdf”并添加了 id、用户名和密码列。但在那之后,只有这两个元素,我不知道如何执行我想做的事情。我应该编写什么代码来连接到数据库以检查值,以及在哪里编写此代码?
我在网上尝试了很多代码,但不起作用:/
如果我的问题看起来很愚蠢,我很抱歉,但我真的需要你的帮助!谢谢!
这是我作为程序员为我们的专业主题中的系统项目所做的 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
}
我对多个表使用一个数据库