上一篇
如何用C高效获取数据库表单信息?
- 行业动态
- 2025-05-11
- 1
使用C#获取数据库表单信息可通过ADO.NET技术实现,常用SqlConnection建立连接,SqlCommand执行查询语句,配合SqlDataReader或DataAdapter读取数据,需注意在操作完成后及时关闭连接,并使用参数化查询防范SQL注入,确保数据安全与资源释放。
准备工作:数据库连接
在操作数据库前,需确保已安装对应的数据库(如SQL Server、MySQL等),并配置正确的连接字符串。
以下是一个典型的SQL Server连接字符串示例:
string connectionString = "Server=myServerAddress;Database=myDatabase;User Id=myUsername;Password=myPassword;";
注意:生产环境中建议将敏感信息(如密码)存储在安全配置文件中(如appsettings.json
),而非硬编码。
使用ADO.NET获取数据
ADO.NET是C#操作数据库的核心技术,通过SqlConnection
、SqlCommand
和SqlDataReader
实现数据交互。
示例代码:查询并读取数据
using (SqlConnection connection = new SqlConnection(connectionString)) { string query = "SELECT UserId, UserName, Email FROM Users"; SqlCommand command = new SqlCommand(query, connection); try { connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { int userId = reader.GetInt32(0); string userName = reader.GetString(1); string email = reader.GetString(2); Console.WriteLine($"ID: {userId}, 用户名: {userName}, 邮箱: {email}"); } reader.Close(); } catch (Exception ex) { Console.WriteLine($"错误: {ex.Message}"); } }
关键点说明
- 资源释放:通过
using
语句确保连接和读取器自动释放,避免内存泄漏。 - 异常处理:捕获并记录异常,提升代码健壮性。
- 参数化查询:若需传递参数,务必使用
SqlParameter
防止SQL注入攻击。
使用Entity Framework Core(推荐)
对于现代应用,推荐使用ORM框架(如Entity Framework Core)简化数据库操作,提升开发效率。
步骤1:安装NuGet包
通过NuGet安装以下包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
(根据数据库类型选择)
步骤2:定义数据模型与DbContext
public class User { public int UserId { get; set; } public string UserName { get; set; } public string Email { get; set; } } public class AppDbContext : DbContext { public DbSet<User> Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(connectionString); } }
步骤3:查询数据
using (var context = new AppDbContext()) { var users = context.Users.ToList(); foreach (var user in users) { Console.WriteLine($"ID: {user.UserId}, 用户名: {user.UserName}"); } }
优势:
- 无需手动编写SQL语句,减少错误风险。
- 支持LINQ查询,代码可读性更高。
- 自动管理数据库连接与事务。
安全性注意事项
防范SQL注入
- 始终使用参数化查询,避免拼接SQL字符串。
- 示例(ADO.NET):
string query = "SELECT * FROM Users WHERE UserName = @UserName"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@UserName", inputName);
最小权限原则
数据库账号应仅授予必要权限(如只读权限)。
加密敏感数据
- 使用SSL加密数据库连接(连接字符串中添加
Encrypt=True
)。
- 使用SSL加密数据库连接(连接字符串中添加
性能优化建议
- 连接池:ADO.NET默认启用连接池,避免频繁开关连接。
- 异步操作:在高并发场景下使用
async/await
:var users = await context.Users.ToListAsync();
- 分页查询:避免一次性加载大量数据:
var pagedUsers = context.Users.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
引用说明
- ADO.NET官方文档:Microsoft Docs – ADO.NET
- Entity Framework Core教程:EF Core官方指南
- OWASP SQL注入防护建议:OWASP SQL Injection