上一篇
如何用C高效连接并操作数据库表格数据?
- 行业动态
- 2025-05-11
- 8
C#通过ADO.NET组件连接数据库,使用SqlConnection建立链接,SqlCommand执行查询,DataAdapter填充DataSet或DataReader读取数据,需妥善处理连接开关,采用参数化查询防范注入风险,实现高效安全的数据库交互操作。
环境准备
安装必要工具
- Visual Studio(推荐2022或更高版本)
- SQL Server Management Studio (SSMS) 或本地数据库实例
- NuGet包:
System.Data.SqlClient
创建测试数据库
使用SSMS执行以下SQL语句:CREATE DATABASE SampleDB; USE SampleDB; CREATE TABLE Users ( UserID INT PRIMARY KEY IDENTITY, UserName NVARCHAR(50), Email NVARCHAR(100) ); INSERT INTO Users (UserName, Email) VALUES ('张三', 'zhangsan@example.com');
建立数据库连接
配置连接字符串
在appsettings.json
中定义(ASP.NET Core项目):
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=SampleDB;Integrated Security=True;TrustServerCertificate=True;" } }
说明:
Integrated Security=True
表示使用Windows身份验证- 若用SQL账号验证,格式为:
User Id=用户名;Password=密码;
编写连接代码
using System.Data.SqlClient; using Microsoft.Extensions.Configuration; public class DatabaseService { private readonly string _connectionString; public DatabaseService(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); } public void ConnectAndQuery() { using (SqlConnection connection = new SqlConnection(_connectionString)) { try { connection.Open(); string query = "SELECT * FROM Users"; SqlCommand command = new SqlCommand(query, connection); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine($"ID: {reader["UserID"]}, 姓名: {reader["UserName"]}"); } reader.Close(); } catch (Exception ex) { Console.WriteLine($"错误: {ex.Message}"); } } } }
数据操作示例
插入数据(参数化查询)
public void AddUser(string userName, string email) { using (SqlConnection connection = new SqlConnection(_connectionString)) { string query = "INSERT INTO Users (UserName, Email) VALUES (@UserName, @Email)"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@UserName", userName); command.Parameters.AddWithValue("@Email", email); connection.Open(); command.ExecuteNonQuery(); } }
更新数据
public void UpdateUserEmail(int userId, string newEmail) { using (SqlConnection connection = new SqlConnection(_connectionString)) { string query = "UPDATE Users SET Email = @Email WHERE UserID = @UserID"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@Email", newEmail); command.Parameters.AddWithValue("@UserID", userId); connection.Open(); command.ExecuteNonQuery(); } }
安全与最佳实践
防范SQL注入
- 始终使用参数化查询(如
SqlParameter
) - 避免拼接SQL字符串
- 始终使用参数化查询(如
资源管理
- 使用
using
语句确保连接和对象自动释放 - 在Web应用中,考虑连接池优化
- 使用
错误处理
- 使用
try-catch
捕获SqlException
- 记录日志以便排查问题:
catch (SqlException sqlEx) { Logger.Error($"数据库错误代码 {sqlEx.Number}: {sqlEx.Message}"); }
- 使用
常见问题排查
问题现象 | 可能原因 | 解决方案 |
---|---|---|
连接超时 | 网络不通/防火墙限制 | 检查端口1433是否开放 |
登录失败 | 身份验证模式配置错误 | 切换SQL Server身份验证模式 |
无法找到数据库 | 连接字符串名称拼写错误 | 检查appsettings.json 配置 |
引用说明
- Microsoft ADO.NET官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/
- SQL Server连接字符串配置指南:https://www.connectionstrings.com/sql-server/
通过遵循上述步骤,您可以在C#项目中实现安全高效的数据库操作,建议定期备份数据,并在生产环境中使用ORM框架(如Entity Framework Core)提升开发效率。