asp.net 三层架构实现登录注册
时间: 2023-07-20 20:10:47 浏览: 51
好的,以下是一个使用 ASP.NET 三层架构实现登录注册的示例代码:
首先,我们需要定义一个数据访问层(DAL),用于对数据库进行操作:
```csharp
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
public class UserDal
{
// 连接字符串
private readonly string connectionString = "Data Source=.;Initial Catalog=TestDB;Integrated Security=True";
// 根据用户名查询用户
public bool CheckUser(string username)
{
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("SELECT COUNT(*) FROM Users WHERE username=@username", conn);
cmd.Parameters.AddWithValue("@username", username);
conn.Open();
return ((int)cmd.ExecuteScalar() > 0);
}
}
// 添加用户
public bool AddUser(string username, string password)
{
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("INSERT INTO Users(username,password) VALUES(@username,@password)", conn);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
conn.Open();
return (cmd.ExecuteNonQuery() > 0);
}
}
// 根据用户名和密码查询用户
public bool Login(string username, string password)
{
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("SELECT COUNT(*) FROM Users WHERE username=@username AND password=@password", conn);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
conn.Open();
return ((int)cmd.ExecuteScalar() > 0);
}
}
}
}
```
上述代码中,我们使用 ADO.NET 提供的 `SqlConnection` 和 `SqlCommand` 类对数据库进行操作,其中 `CheckUser` 方法用于检查用户名是否已存在,`AddUser` 方法用于添加新用户,`Login` 方法用于验证用户登录。
接下来,我们定义一个业务逻辑层(BLL),用于对数据访问层进行封装,提供更加友好的 API 接口:
```csharp
using DAL;
namespace BLL
{
public class UserBll
{
private readonly UserDal dal = new UserDal();
// 检查用户名是否已存在
public bool CheckUser(string username)
{
return dal.CheckUser(username);
}
// 注册新用户
public bool Register(string username, string password)
{
if (CheckUser(username))
{
return false; // 用户名已存在
}
return dal.AddUser(username, password);
}
// 用户登录
public bool Login(string username, string password)
{
return dal.Login(username, password);
}
}
}
```
在业务逻辑层中,我们调用数据访问层提供的方法进行操作,同时可以对返回结果进行处理,提供更加友好的 API 接口。
最后,我们定义一个 ASP.NET 页面,实现用户登录和注册的功能:
```csharp
using BLL;
namespace WebApplication1
{
public partial class Login : System.Web.UI.Page
{
private readonly UserBll bll = new UserBll();
protected void Page_Load(object sender, EventArgs e)
{
}
// 注册按钮点击事件
protected void btnRegister_Click(object sender, EventArgs e)
{
string username = txtUsername.Text.Trim();
string password = txtPassword.Text.Trim();
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
{
lblMsg.Text = "用户名和密码不能为空!";
return;
}
if (bll.Register(username, password))
{
lblMsg.Text = "注册成功,请登录!";
}
else
{
lblMsg.Text = "用户名已存在,请重新输入!";
}
}
// 登录按钮点击事件
protected void btnLogin_Click(object sender, EventArgs e)
{
string username = txtUsername.Text.Trim();
string password = txtPassword.Text.Trim();
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
{
lblMsg.Text = "用户名和密码不能为空!";
return;
}
if (bll.Login(username, password))
{
lblMsg.Text = "登录成功!";
}
else
{
lblMsg.Text = "用户名或密码错误,请重新输入!";
}
}
}
}
```
在 ASP.NET 页面中,我们调用业务逻辑层提供的方法进行操作,同时通过 `Page_Load` 方法初始化页面。需要注意的是,为了防止 SQL 注入攻击,我们应该对用户输入进行过滤和验证。此外,我们还需要将数据库连接字符串存储在配置文件中,以便在不同环境下进行配置。