【发布时间】:2014-04-07 20:02:03
【问题描述】:
我正在创建一个 C# 应用程序,该应用程序将允许唯一的用户使用用户名和密码创建一个帐户。所以只有这个用户可以访问它。因为它现在坐在那里,所以我将它连接到本地 SQL 数据库,并带有一个用于登录信息的表。我有一个表单,用户可以在其中创建帐户。它将信息发送到表。我有一个登录页面,它将在让用户进入 main.cs 之前对表进行身份验证但是,就目前而言......打开应用程序的任何人都可以创建登录凭据并访问它。有没有办法让应用程序在第一次启动时通过初始帐户创建或设置运行,然后直接打开到登录页面?我正在寻找一种更好的方法来保护它。
示例:此应用会为我保留我拥有的物品的库存。但我想用密码保护它。但是,我想让它不是每个启动应用程序的人都可以创建一个帐户并访问此信息。我正在尝试使用户(我自己)可以通过表单设置密码。然后,从那时起,就可以通过该密码访问应用程序了。
登录表格:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication2
{
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\brmcbrid\Documents\UserLogin.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From Login where Username='" + userName.Text + "' and Password = '" + password.Text + "'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
this.Hide();
Main wipd = new Main();
wipd.Show();
}
else
{
MessageBox.Show("Please Check your username and password and try again.");
}
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.Hide();
CreateNewAccount na = new CreateNewAccount();
na.Show();
}
}
}
注册表:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;
namespace WindowsFormsApplication2
{
public partial class CreateNewAccount : Form
{
public CreateNewAccount()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
LoginForm lf = new LoginForm();
lf.Show();
}
private void button1_Click(object sender, EventArgs e)
{
//instance of sqlconnection
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\brmcbrid\Documents\UserLogin.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand cmd = new SqlCommand("INSERT into LOGIN values('" + newUserName.Text + "','" + newPassword.Text + "','" + firstName.Text + "','" + lastName.Text + "','" + newEmail.Text + "')", con);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
if (i > 0)
{
this.Hide();
LoginForm lf = new LoginForm();
lf.Show();
MessageBox.Show("New User Account added successfully!");
}
else
{
MessageBox.Show("There was a problem creating the account. Please check the values and try again.");
}
}
}
}
【问题讨论】:
-
更大的问题是:如果您将所有这些都存储在数据库中,如何防止有人在您的应用背后进入数据库并摆弄这个用户帐户的数据?
-
Marc,我正在学习 C#,这仅供我使用。只是找不到如何让它按我的意愿工作。
-
另外,用更多信息和示例编辑了 OP。
-
为什么不让您的程序检查“用户”表中的行数,如果 > 0 则转到登录屏幕?当然,这种方法不是防篡改的(正如 Marc B 所说)。
-
LordTakkera - 这实际上是完美的。你能提供一个例子吗?
标签: c# sql forms login registration