上一篇
.net.怎么连接数据库
- 数据库
- 2025-07-19
- 3476
.NET 连接数据库需先引入命名空间,创建 SqlConnection 对象并配置连接字符串,最后调用 Open 方法建立连接
在 .NET 开发中,数据库连接是实现数据存储、查询和操作的核心步骤,以下是关于 .NET 连接数据库的详细指南,涵盖基础概念、主流数据库实现方式及代码示例。
数据库连接基础概念
-
ADO.NET 与 EF Core
- ADO.NET:提供底层数据库操作能力,通过
SqlConnection(SQL Server)、MySqlConnection(MySQL)等类实现连接。 - Entity Framework Core(EF Core):基于 ORM 的高层框架,通过定义实体类和
DbContext简化数据操作。
- ADO.NET:提供底层数据库操作能力,通过
-
连接字符串
用于指定数据库类型、服务器地址、认证方式等信息,格式因数据库而异,
- SQL Server:
Server=localhost;Database=Test;User Id=sa;Password=123456; - MySQL:
Server=localhost;Database=test;Uid=root;Pwd=123456;
- SQL Server:
常见数据库连接实现
| 数据库类型 | 关键 NuGet 包 | 示例连接字符串 |
|---|---|---|
| SQL Server | System.Data.SqlClient |
Server=localhost;Database=Test;User Id=sa;Password=123456; |
| MySQL | MySql.Data |
Server=localhost;Database=test;Uid=root;Pwd=123456;CharSet=utf8; |
| PostgreSQL | Npgsql |
Host=localhost;Database=test;Username=postgres;Password=123456; |
| SQLite | System.Data.SQLite |
Data Source=test.db;Version=3; |
| Oracle | Oracle.ManagedDataAccess |
User Id=admin;Password=123456;Data Source=localhost:1521/orclpdb; |
ADO.NET 连接数据库步骤与代码示例
添加依赖
通过 NuGet 安装对应数据库的驱动包,SQL Server 的 System.Data.SqlClient。
编写连接代码
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
// 定义连接字符串
string connectionString = "Server=localhost;Database=Test;User Id=sa;Password=123456;";
// 创建连接对象
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
// 打开连接
connection.Open();
Console.WriteLine("数据库连接成功!");
// 执行 SQL 命令(示例)
string query = "SELECT FROM Users";
using (SqlCommand command = new SqlCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.Write(reader["Id"] + "t");
Console.WriteLine(reader["Name"]);
}
}
}
}
catch (SqlException ex)
{
Console.WriteLine("数据库连接错误:" + ex.Message);
}
} // 自动关闭连接
}
}
关键点解析
using语句:确保连接和命令对象在使用后自动释放资源。- 异常处理:通过
try-catch捕获SqlException,处理连接失败或 SQL 错误。 - 连接池:默认启用连接池,可通过
Max Pool Size参数优化性能。
Entity Framework Core 连接方法
配置 DbContext
// 导入包:Microsoft.EntityFrameworkCore.SqlServer
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// 读取连接字符串(推荐从配置文件获取)
options.UseSqlServer("Server=localhost;Database=Test;User Id=sa;Password=123456;");
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
使用依赖注入
// 在 Program.cs 中配置服务
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer("Server=localhost;Database=Test;User Id=sa;Password=123456;"));
// 在控制器或服务中使用
var dbContext = builder.Services.BuildServiceProvider().GetRequiredService<AppDbContext>();
var users = dbContext.Users.ToList();
连接字符串管理与安全
-
配置文件存储
将连接字符串写入appsettings.json,并通过Configuration加载:
{ "ConnectionStrings": { "Default": "Server=localhost;Database=Test;User Id=sa;Password=123456;" } }代码中读取:
var connectionString = Configuration.GetConnectionString("Default"); -
环境变量与密钥管理

- 生产环境中避免明文存储密码,可使用环境变量(如
DB_PASSWORD)或密钥库。 - 示例:
options.UseSqlServer(Environment.GetEnvironmentVariable("DB_CONNECTION_STRING"));
- 生产环境中避免明文存储密码,可使用环境变量(如
错误处理与优化
| 问题 | 解决方案 |
|---|---|
| 连接超时 | 设置 ConnectTimeout(单位秒),ConnectTimeout=30; |
| 并发连接过多 | 调整 Max Pool Size(默认 100),如 Max Pool Size=50; |
| 权限不足 | 检查数据库用户权限,确保具备目标数据库的读写权限。 |
| SSL 证书错误(远程连接) | 在连接字符串中启用加密:Encrypt=true;TrustServerCertificate=false; |
FAQs
什么是连接池,如何配置?
连接池通过复用物理连接减少频繁创建/销毁的开销,关键参数包括:
Max Pool Size:最大连接数(默认 100)。Min Pool Size:初始化时创建的最小连接数(默认 0)。
示例:Min Pool Size=10;Max Pool Size=50;
如何保护连接字符串中的敏感信息?
- 配置文件加密:使用工具对
appsettings.json中敏感字段加密。 - 环境变量:将连接字符串拆分为多段,分别存储于环境变量中。
- 密钥管理服务:如 Azure Key Vault
