aspnet如何连接数据库读取数据?详细步骤与示例分享

在ASP.NET Core中高效安全地连接数据库并读取数据是开发Web应用的核心能力,以下是基于ADO.NET的专业实现方案,遵循最佳实践确保性能与安全:

aspnet如何连接数据库读取数据?详细步骤与示例分享


环境准备与配置

  1. 引用必要NuGet包

    Install-Package System.Data.SqlClient # SQL Server
    # 或 Install-Package MySql.Data # MySQL
  2. 配置连接字符串 (appsettings.json)

    {
    "ConnectionStrings": {
     "DefaultConnection": "Server=.;Database=YourDB;User Id=sa;Password=YourPwd;Encrypt=True;TrustServerCertificate=True;"
    }
    }

分层架构实现(推荐)

数据访问层 (DAL)

public class ProductRepository
{
    private readonly IConfiguration _config;
    public ProductRepository(IConfiguration config) 
    {
        _config = config;
    }
    public List<Product> GetProducts()
    {
        var products = new List<Product>();
        // 使用using确保资源释放
        using (var conn = new SqlConnection(
            _config.GetConnectionString("DefaultConnection")))
        {
            // 参数化查询防SQL注入
            var sql = "SELECT ProductId, Name, Price FROM Products WHERE Stock > @MinStock";
            using (var cmd = new SqlCommand(sql, conn))
            {
                cmd.Parameters.AddWithValue("@MinStock", 10);
                conn.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        products.Add(new Product()
                        {
                            Id = reader.GetInt32(0),
                            Name = reader.GetString(1),
                            Price = reader.GetDecimal(2)
                        });
                    }
                }
            }
        }
        return products;
    }
}
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

服务层调用 (Service Layer)

public class ProductService
{
    private readonly ProductRepository _repo;
    public ProductService(ProductRepository repo) 
    {
        _repo = repo;
    }
    public IEnumerable<Product> GetAvailableProducts() 
    {
        return _repo.GetProducts();
    }
}

控制器注入 (Controller)

aspnet如何连接数据库读取数据?详细步骤与示例分享

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly ProductService _service;
    public ProductsController(ProductService service) 
    {
        _service = service;
    }
    [HttpGet]
    public IActionResult Get() 
    {
        return Ok(_service.GetAvailableProducts());
    }
}

关键安全与性能优化

  1. 防御性编程

    • 参数化查询:彻底杜绝SQL注入
    • 连接池:默认启用,通过Pooling=true控制
    • 错误日志:捕获SqlException并记录
  2. 异步操作提升吞吐量

    public async Task<List<Product>> GetProductsAsync()
    {
     using (var conn = new SqlConnection(_config.GetConnectionString("DefaultConnection")))
     {
         await conn.OpenAsync();
         using (var cmd = new SqlCommand("SELECT...", conn))
         {
             using (var reader = await cmd.ExecuteReaderAsync())
             {
                 // 异步读取逻辑
             }
         }
     }
    }
  3. 企业级扩展方案

    • ORM选择:Entity Framework Core(复杂业务场景)
    • Dapper:高性能微ORM(适合读密集型操作)
    • 连接管理:使用IDbConnectionFactory

不同数据库适配方案

数据库类型 连接包 连接字符串示例
SQL Server System.Data.SqlClient Server=.;Database=DB;User=sa;Pwd=xxx;
MySQL MySql.Data Server=localhost;Database=DB;Uid=root;Pwd=xxx;
PostgreSQL Npgsql Host=localhost;Database=DB;Username=postgres;Password=xxx;

常见陷阱解决方案

  1. 连接泄露

    • 错误:未调用Dispose()
    • 修复:严格使用using
  2. 密码硬编码

    aspnet如何连接数据库读取数据?详细步骤与示例分享

    • 错误:代码中写死连接串
    • 修复:通过IConfiguration注入 + 使用Azure Key Vault
  3. 查询超时

    • 错误:复杂查询未设超时
    • 修复:cmd.CommandTimeout = 30;

架构师建议:在微服务场景下,建议将数据库访问封装为独立服务,通过gRPC或REST API提供数据,对于高并发读取,可引入Redis缓存查询结果,响应速度可提升10倍以上。


互动讨论:你在实际项目中如何处理分库分表的数据读取?是否遇到过连接池耗尽的情况?欢迎在评论区分享你的实战经验与解决方案!

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/18825.html

(0)
能开发网站吗?网站建设全流程详解及费用解析!
上一篇 2026年2月9日 07:31
ASP.NET如何访问数据库?揭秘高效数据库连接方案
下一篇 2026年2月9日 07:34

相关推荐

  • AI智能区块链应用有哪些,人工智能与区块链结合场景是什么?

    AI与区块链的融合代表了下一代技术架构的核心方向,这种结合不仅仅是技术的简单叠加,而是通过将人工智能的决策能力与区块链的信任机制深度耦合,构建出一个更加高效、透明且安全的数字生态系统,在这一体系中,AI负责处理海量数据并生成智能决策,而区块链则确保这些数据和决策的不可篡改性与可追溯性,从而彻底解决了数据孤岛、算……

    2026年2月24日
    15700
  • 服务器cpu使用率过高怎么办,如何快速降低cpu占用率

    服务器CPU使用率过高直接导致业务响应延迟、服务超时甚至系统崩溃,必须立即排查进程异常、优化应用程序逻辑并升级硬件配置,这是保障系统稳定性的核心结论,解决这一问题不能仅依赖重启服务器,需从进程管理、代码优化、架构调整三个维度建立长效机制,通过精细化监控与分层治理,将CPU资源控制在合理水位, 进程级排查与紧急处……

    2026年4月2日
    9200
  • 服务器ecs安装wdcp,ecs服务器怎么安装wdcp面板

    在云服务器运维领域,实现网站环境的快速部署与可视化管理是提升运维效率的关键,在ECS实例上安装WDCP(WDlinux Control Panel),是目前构建Linux服务器WEB应用环境最高效、最稳定的解决方案之一,它能够将复杂的LNMP/LAMP环境配置工作图形化、流程化,极大降低了服务器管理门槛,通过W……

    2026年4月4日
    7000
  • AI人工智能编程怎么学,零基础新手能学会吗?

    AI编程正在重塑软件工程的核心逻辑,将开发者的重心从繁琐的语法编写转移至高阶的系统架构设计与业务逻辑实现, 这一转变不仅是工具的升级,更是生产力的质变,通过深度理解自然语言意图,智能编程助手已成为现代开发流程中不可或缺的“副驾驶”,它通过自动化重复性任务、提供实时上下文感知建议,显著缩短了从概念到代码的转化周期……

    2026年2月21日
    15900
  • AIoT智控是什么?AIoT智能控制解决方案有哪些

    AIoT智控通过边缘计算与云端协同,将传统硬件升级为具备自主决策能力的智能节点,显著降低能耗并提升管理效率,是目前实现全屋及工业场景智能化的最优解,过去我们谈论智能家居,往往局限于手机APP远程开关灯或空调,这种“伪智能”不仅体验割裂,还需要用户频繁介入操作,真正的AIoT(人工智能物联网)智控,核心在于“感知……

    2026年6月10日
    3800
  • asp中如何编写截取特定字符串部分内容的函数?有哪几种实现方法?

    在ASP中截取字符串特定部分内容,通常使用Mid、Left、Right等内置函数,配合InStr或Split函数定位关键位置,实现灵活精准的文本提取,以下是详细实现方法和专业应用方案,ASP字符串截取核心函数详解ASP(VBScript)提供多个字符串处理函数,理解其用法是精准截取的基础,Mid函数:核心截取工……

    2026年2月4日
    12030
  • ASP.NET如何发红包?微信红包接口开发指南

    在ASP.NET中实现红包功能需综合业务逻辑、高并发处理和数据一致性保障,核心方案为:分布式事务+Redis缓存+异步队列,确保高并发场景下红包金额分配的准确性与系统稳定性,业务场景与技术挑战红包功能的核心需求:金额随机算法:固定总额下生成随机红包(如二倍均值法)高并发抢购:瞬时万人级请求处理事务一致性:避免超……

    2026年2月11日
    12830
  • NovoServe荷兰服务器测评,实测数据与性能表现,荷兰服务器哪家好

    NovoServe荷兰服务器在2026年实测中展现出极高的性价比与稳定性,特别适合对数据隐私要求高、需要低延迟访问欧洲市场的建站用户及跨境电商从业者,其综合性能优于同价位多数东欧节点,但需注意其国际出口带宽在高峰期可能存在波动,NovoServe核心性能实测数据解析网络延迟与连通性表现根据2026年Q1针对欧洲……

    2026年5月19日
    3400
  • AIoT设备连接数是多少?2026年全球AIoT设备连接数统计

    AIoT设备连接数的爆发式增长已成定局,未来企业的核心竞争力不在于连接数量的简单累加,而在于对连接质量的把控与数据价值的深度挖掘,随着5G、边缘计算与人工智能技术的深度融合,连接已不再是单一的传输通道,而是演变为智能决策的起点,企业若想在万物互联时代占据高地,必须从追求“广连接”转向攻克“稳连接”与“智连接……

    2026年3月17日
    12000
  • 服务器ECS代理报价是多少?阿里云ECS代理价格表及优惠详情

    服务器ECS代理报价的核心结论:合理代理模式可节省30%-50%采购成本,但需严选服务商资质与服务条款,避免隐性费用陷阱,为什么代理报价差异巨大?——三大决定性因素厂商授权层级不同阿里云/华为云/腾讯云等一线厂商,仅授予金牌/白金级代理直供价格权限;二级分销商报价常高于一级代理5%-15%,且无原厂服务通道;无……

    2026年4月15日
    6400

发表回复

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