656 字
3 分钟
C# 操作 SQL Server 数据库:增、删、改、查基本操作
在 .NET 开发中,ADO.NET 是与 SQL Server 交互的基石。掌握底层的 SqlConnection、SqlCommand 等对象的操作,不仅能帮助你理解 ORM(如 EF Core)的原理,在处理高性能或轻量级任务时也更加得心应手。
1. 基础配置与命名空间
在 C# 中与 SQL Server 交互,必须引用核心驱动库:
using System;using System.Data;using Microsoft.Data.SqlClient; // 现代 .NET 建议使用此库,而非 System.Data.SqlClient2. 数据库连接管理
核心原则: 数据库连接属于昂贵的资源。应遵循“晚开早关”原则,并始终使用 using 块确保即使发生异常也能释放连接池资源。
建议的连接方式
// 建议将连接字符串存放在配置文件中private string _connectionString = "Server=.;Database=MyDb;User Id=sa;Password=your_password;";
/// <summary>/// 测试连接状态/// </summary>public bool TestConnection(){ using (SqlConnection conn = new SqlConnection(_connectionString)) { try { conn.Open(); return true; } catch { return false; } } // 离开此代码块,conn 会自动 Close 和 Dispose}3. 执行 增、删、改(非查询操作)
对于 INSERT、UPDATE、DELETE,我们使用 ExecuteNonQuery。
注意: 绝对不要直接拼 SQL 字符串!必须使用参数化查询来防止 SQL 注入攻击。
/// <summary>/// 执行非查询 SQL/// </summary>public int ExecuteNonQuery(string sql, SqlParameter[] parameters = null){ using (SqlConnection conn = new SqlConnection(_connectionString)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { if (parameters != null) cmd.Parameters.AddRange(parameters); conn.Open(); return cmd.ExecuteNonQuery(); // 返回受影响的行数 } }}
// 调用示例string sql = "UPDATE Users SET Name = @name WHERE Id = @id";SqlParameter[] paras = { new SqlParameter("@name", "Gemini"), new SqlParameter("@id", 1)};int rows = ExecuteNonQuery(sql, paras);4. 执行查询(获取数据集)
查询操作通常有两种返回形式:DataSet(离线数据集)或 SqlDataReader(只读向前的流)。
方式 A:使用 DataAdapter 填充 DataSet(适合小型数据集)
public DataSet GetDataSet(string sql, SqlParameter[] parameters = null){ using (SqlConnection conn = new SqlConnection(_connectionString)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { if (parameters != null) cmd.Parameters.AddRange(parameters); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } }}5. 进阶:异步操作(推荐)
在现代应用(尤其是 Web 或 UI 密集型应用)中,应优先使用异步方法,以防阻塞主线程。
public async Task<int> ExecuteNonQueryAsync(string sql){ using (SqlConnection conn = new SqlConnection(_connectionString)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { await conn.OpenAsync(); return await cmd.ExecuteNonQueryAsync(); } }}💡 最佳实践总结
- 防止注入:始终使用
SqlParameter,永不使用string.Format拼接 SQL。 - 资源管理:强制使用
using语句,它是处理SqlConnection的金科玉律。 - 异常处理:不要在底层库里简单地
return ex.Message。建议抛出异常或记录到日志(如 Log4Net/Serilog),由业务层决定如何响应用户。 - 连接字符串:将其保存在
appsettings.json或web.config中,不要硬编码在代码里。
C# 操作 SQL Server 数据库:增、删、改、查基本操作
https://sw.rscclub.website/posts/csharpsqlservercrud/