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
下一篇 2026年2月9日 07:34

相关推荐

  • AI检测代码漏洞准吗?AI检测代码漏洞工具哪个好?

    AI检测代码漏洞代表了软件安全领域的革命性突破,它标志着安全审计从基于规则的静态分析逐渐转向基于深度学习的语义理解,通过利用大语言模型和机器学习算法,AI能够像资深安全专家一样理解代码逻辑、上下文依赖以及潜在的攻击面,从而在开发阶段即发现传统工具难以识别的复杂漏洞和零日威胁,这种技术不仅大幅提升了漏洞检测的准确……

    2026年2月17日
    11530
  • AI应用部署双十二促销活动怎么买?有哪些优惠?

    双十二不仅是电商狂欢的节点,更是企业进行数字化基础设施建设、特别是AI应用落地与部署的最佳窗口期,面对日益增长的大模型推理需求与边缘计算场景,企业在此次促销活动中的核心决策逻辑应当是:以高性价比算力为基石,结合自动化运维能力,实现AI应用从开发到落地的无缝衔接,在降低试错成本的同时,确保业务高峰期的系统高可用性……

    2026年2月17日
    16700
  • aspx键在Web开发中的具体用途与作用有哪些疑问?

    ASPX键是ASP.NET Web Forms框架中用于实现服务器端控件状态持久化与事件处理的核心机制,它通过名为__VIEWSTATE的隐藏字段将控件的状态信息编码存储,在页面回发(PostBack)时确保数据不丢失,并触发相应的服务器端事件,这一机制不仅保障了Web应用在无状态的HTTP协议下保持状态连续性……

    2026年2月3日
    6100
  • ASP.NET中aspx.cs文件的位置如何查找?

    在ASP.NET Web Forms开发中,aspx文件和其关联的aspx.cs(后置代码文件)的位置关系是项目结构和功能实现的基础,准确而言:aspx.cs文件必须与其对应的.aspx文件位于同一物理目录下,并且文件名前缀必须严格一致(仅扩展名不同), 这种紧密的物理位置和命名约定是ASP.NET运行时自动关……

    2026年2月6日
    6100
  • AI与Java有什么联系?Java在人工智能开发中的作用大吗

    Java不仅是人工智能的底层支撑者,更是AI技术实现大规模工业化落地的关键桥梁,虽然Python凭借其简洁的语法和丰富的库在AI模型研发阶段占据主导,但Java在企业级AI应用部署、系统集成以及高性能推理阶段拥有不可替代的优势,AI与Java的联系,本质上是从“实验室原型”走向“生产环境”的最佳路径,这种联系体……

    2026年3月10日
    4800
  • AIoT架构设计怎么做?AIoT系统架构设计方案详解

    AIoT架构设计的核心在于构建一个“端-边-云”协同的智能闭环系统,其本质不仅仅是硬件与软件的简单堆叠,而是数据价值的高效转化与落地,成功的架构设计必须解决海量异构设备的接入管理、实时数据的低延迟处理以及AI模型在全生命周期的持续迭代问题, 一个优秀的架构应当具备高可用性、高扩展性和极强的安全性,从而支撑起万物……

    2026年3月20日
    4800
  • AIoT物联网是什么意思,AIoT物联网发展前景如何

    AIoT物联网的核心价值在于实现“万物智联”,即通过人工智能(AI)与物联网技术的深度融合,让设备具备感知、思考与执行的能力,从而推动产业从单纯的“连接”向“智能服务”转型,这一技术变革不仅提升了运营效率,更重构了商业价值链,成为企业数字化转型的关键引擎,AI与IoT的深度融合:从数据采集到智能决策传统物联网主……

    2026年3月21日
    3800
  • ASP.NET网站运行慢如何优化?ASP.NET性能优化实战技巧

    ASP.NET是微软开发的强大开源web框架,专为构建高性能、安全可靠的网站和web应用而设计,它基于.NET平台,支持C#、F#等语言,提供丰富的工具和库,简化开发流程,提升企业级应用的交付效率,作为现代web开发的核心技术,ASP.NET在电商、金融、企业系统等领域广泛应用,凭借其可扩展性和跨平台能力(如支……

    2026年2月10日
    6900
  • AI剪辑报价是多少?AI剪辑软件收费标准是什么?

    AI视频剪辑技术的成熟彻底重塑了内容生产领域的成本结构,其核心结论在于:AI剪辑报价并非单一维度的数字,而是由软件授权模式、算力消耗成本以及人工介入深度共同决定的复合型价格体系, 目前市场上,基础的AI剪辑工具已将门槛降至极低,但专业级的AI剪辑服务报价依然取决于“人机协作”的效率比与交付质量,理解这一报价逻辑……

    2026年2月27日
    8900
  • AI智能区块链算法是什么,AI智能区块链算法如何运作

    AI智能区块链算法代表了下一代分布式账本技术的核心演进方向,它不仅仅是两种前沿技术的简单叠加,而是通过深度的算法融合,从根本上解决了传统区块链在效率、安全性和可扩展性上的瓶颈,这种技术范式利用机器学习优化共识机制、智能合约执行以及网络资源调度,构建出具备自我进化、自适应调节能力的去中心化基础设施,其核心价值在于……

    2026年2月22日
    6500

发表回复

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