怎样操作ASP.NET数据库增删改查?| ASP.NET数据库增删改查教程

在ASP.NET中进行数据库的增删改查(CRUD)操作,主要有两种主流方式:ADO.NET(原始数据库访问)和Entity Framework(ORM框架),以下是详细指南:

asp.net数据库的增删改查


ADO.NET 方式(原生SQL操作)

配置数据库连接

Web.config中添加连接字符串:

asp.net数据库的增删改查

<connectionStrings>
  <add name="MyDb" 
       connectionString="Server=.;Database=TestDB;User Id=sa;Password=123456;" 
       providerName="System.Data.SqlClient"/>
</connectionStrings>

创建实体类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

CRUD操作示例

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public class UserRepository
{
    private string connectionString = ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString;
    // 查询所有用户
    public List<User> GetAllUsers()
    {
        List<User> users = new List<User>();
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            string sql = "SELECT Id, Name, Email FROM Users";
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                users.Add(new User()
                {
                    Id = Convert.ToInt32(reader["Id"]),
                    Name = reader["Name"].ToString(),
                    Email = reader["Email"].ToString()
                });
            }
        }
        return users;
    }
    // 新增用户
    public void AddUser(User user)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            string sql = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@Name", user.Name);
            cmd.Parameters.AddWithValue("@Email", user.Email);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
    // 更新用户
    public void UpdateUser(User user)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            string sql = "UPDATE Users SET Name=@Name, Email=@Email WHERE Id=@Id";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@Id", user.Id);
            cmd.Parameters.AddWithValue("@Name", user.Name);
            cmd.Parameters.AddWithValue("@Email", user.Email);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
    // 删除用户
    public void DeleteUser(int id)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            string sql = "DELETE FROM Users WHERE Id=@Id";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@Id", id);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

Entity Framework Core 方式(推荐)

安装NuGet包

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer

创建DbContext

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    public DbSet<User> Users { get; set; }
}

配置依赖注入(Startup.cs)

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("MyDb")));
}

CRUD操作示例

public class UserService
{
    private readonly AppDbContext _context;
    public UserService(AppDbContext context)
    {
        _context = context; // 依赖注入DbContext
    }
    // 查询所有用户
    public List<User> GetAllUsers() => _context.Users.ToList();
    // 新增用户
    public void AddUser(User user)
    {
        _context.Users.Add(user);
        _context.SaveChanges();
    }
    // 更新用户
    public void UpdateUser(User user)
    {
        _context.Users.Update(user);
        _context.SaveChanges();
    }
    // 删除用户
    public void DeleteUser(int id)
    {
        var user = _context.Users.Find(id);
        if (user != null)
        {
            _context.Users.Remove(user);
            _context.SaveChanges();
        }
    }
}

在Controller中使用(ASP.NET Core MVC示例)

public class UserController : Controller
{
    private readonly UserService _userService;
    public UserController(UserService userService)
    {
        _userService = userService;
    }
    // GET: /User
    public IActionResult Index()
    {
        var users = _userService.GetAllUsers();
        return View(users);
    }
    // POST: /User/Create
    [HttpPost]
    public IActionResult Create(User user)
    {
        if (ModelState.IsValid)
        {
            _userService.AddUser(user);
            return RedirectToAction("Index");
        }
        return View(user);
    }
    // POST: /User/Delete/5
    [HttpPost]
    public IActionResult Delete(int id)
    {
        _userService.DeleteUser(id);
        return RedirectToAction("Index");
    }
}

关键注意事项

  1. 参数化查询:ADO.NET中必须使用Parameters防止SQL注入
  2. 连接管理:使用using确保连接及时释放
  3. 异步操作:EF Core支持async/await(如 ToListAsync()
  4. 事务处理
    using (var transaction = _context.Database.BeginTransaction())
    {
      try {
        // 多个操作
        transaction.Commit();
      } catch {
        transaction.Rollback();
      }
    }

两种方式对比

特性 ADO.NET Entity Framework Core
开发速度 慢(需手写SQL) 快(自动生成SQL)
安全性 需手动参数化 自动参数化
维护性 低(SQL与代码混合) 高(面向对象)
性能 极高(精细控制) 良好(满足大部分场景)
适用场景 高性能需求、复杂SQL、遗留系统 快速开发、业务系统、代码优先

根据项目需求选择合适的方式:追求开发效率选EF Core,追求极致性能或需复杂SQL优化选ADO.NET。

asp.net数据库的增删改查

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/286149.html

(0)
上一篇 2026年2月7日 19:52
下一篇 2026年2月7日 19:59

相关推荐

  • asp3des是什么?它的原理、应用场景及安全特性如何理解?

    在Web应用开发中,数据安全是保障用户隐私与系统可信度的核心环节,针对动态网页环境下的数据加密需求,ASP3DES作为一种结合Active Server Pages(ASP)技术的3重数据加密标准(Triple Data Encryption Standard)实现方案,逐渐成为早期Web应用中保护敏感信息的关……

    2026年1月8日
    0800
  • ASP.NET如何高效实现用户注册与验证功能的细节与挑战?

    ASP.NET实现用户注册和验证功能:随着互联网的快速发展,用户注册和验证功能已经成为Web应用程序的标配,ASP.NET作为微软推出的开源框架,以其强大的功能和易用性,被广泛应用于各种Web开发场景,本文将详细介绍如何在ASP.NET中实现用户注册和验证功能,用户注册创建数据库表在数据库中创建一个用于存储用户……

    2025年12月13日
    01140
  • j41h-16cdn80究竟代表何种型号或规格?详细解释其含义是什么?

    j41h-16cdn80:解码工业标准代码在工业领域,各种设备和部件的型号和规格繁多,为了方便管理和识别,通常使用一系列代码来表示,j41h-16cdn80就是其中一种典型的工业标准代码,本文将为您解码j41h-16cdn80的含义,帮助您更好地了解这一代码所代表的内容,j41h-16cdn80代码分解j41h……

    2025年12月10日
    0950
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 佳能LBP663cdn打印机无纸打印功能,究竟如何实现高效办公?

    佳能打印机LBP663CDN:高效打印,绿色环保,无纸办公新时代佳能打印机LBP663CDN简介佳能打印机LBP663CDN是一款高效、稳定的激光打印机,专为办公室和家庭使用而设计,该机型采用先进的无纸打印技术,可实现无纸办公,节省资源,绿色环保,佳能打印机LBP663CDN主要特点高效打印LBP663CDN采……

    2025年11月29日
    01070

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(5条)

  • 酷狗2598的头像
    酷狗2598 2026年2月15日 09:22

    这篇文章讲ASP.NET数据库操作真清楚!ADO.NET虽然原始点但灵活,Entity Framework用起来省事多了,开发速度快不少。实际项目里我常用EF,感觉上手容易多了。感谢分享!

  • 大小7979的头像
    大小7979 2026年2月15日 09:46

    这篇文章讲得真清楚!我之前用ADO.NET手动写SQL有点麻烦,后来换成Entity Framework后开发速度快多了,代码也更简洁。对新入门的朋友来说,EF可能更友好些,推荐试试看。

  • 大robot816的头像
    大robot816 2026年2月15日 10:04

    哈哈,这篇文章讲ASP.NET数据库增删改查的操作,还挺实用的!作为一个搞技术的老手,我觉得它把ADO.NET和Entity Framework两种方式都覆盖了,特别全面。ADO.NET嘛,确实是底层的经典方法,灵活是灵活,但写代码时太啰嗦了,每次都得手动处理连接和命令对象,新手容易晕头转向。我平时项目里更常用Entity Framework,因为ORM框架真心省事,像用LINQ查询数据库就跟写普通代码一样顺滑,大大提升了开发效率。不过,文章没忘了提醒ADO.NET在性能优化时的优势,这点挺客观的。 我个人建议初学者优先学Entity Framework,上手快,避免踩坑。但老手们看这篇文章,也能复习下基础,毕竟有些场景还得靠ADO.NET硬刚。总之,这是个扎实的入门教程,帮开发者少走弯路,值得一读!

  • 冷robot704的头像
    冷robot704 2026年2月15日 10:12

    这篇文章写得真棒!作为刚学ASP.NET的小白,我之前用ADO.NET太折腾了,换成Entity Framework后操作数据库轻松多了,教程讲得超清楚,推荐新手都试试。

  • 萌美7374的头像
    萌美7374 2026年2月15日 10:18

    这篇文章讲ASP.NET数据库操作真详细!ADO.NET和Entity Framework两种方式都介绍了,我个人觉得Entity Framework更简单好用,特别是对新手特别友好。教程步骤清晰,跟着做就上手了,超实用!