.net连接数据库到底怎么弄才对,步骤方法简单讲解分享
- 问答
- 2026-01-14 23:14:03
- 1
搞清楚你要开哪把锁(选择数据库和驱动)
.NET 本身就像一个万能钥匙胚,但它不能直接开所有的锁,你需要根据数据库的类型,给它装上对应的“钥匙齿”,这个“钥匙齿”数据库驱动 或者叫 数据提供程序。
常见的几种锁和对应的钥匙齿:
-
SQL Server:这是微软自家的,配合最好,你的钥匙齿就是
System.Data.SqlClient(老一点)或者Microsoft.Data.SqlClient(新推荐),你需要在项目里通过 NuGet 安装这个包。- 怎么装? 在Visual Studio里,右键点击你的项目 -> “管理 NuGet 程序包” -> 浏览 -> 搜索
Microsoft.Data.SqlClient-> 点击安装,这就好比是给钥匙胚装上了开SQL Server锁的齿。
- 怎么装? 在Visual Studio里,右键点击你的项目 -> “管理 NuGet 程序包” -> 浏览 -> 搜索
-
MySQL:也很常用,钥匙齿是
MySql.Data或MySqlConnector,同样,通过 NuGet 安装,我个人更推荐MySqlConnector,据说性能更好一些。 -
SQLite:轻量级的文件数据库,就像一个小抽屉的锁,钥匙齿是
System.Data.SQLite或Microsoft.Data.Sqlite,NuGet 安装。 -
PostgreSQL:钥匙齿是
Npgsql,NuGet 安装。
不管你用哪种数据库,第一步永远是把这个对应的“驱动”包安装到你的项目里。 (来源:基于 .NET 开发基础常识)
第二步:配一把正确的钥匙(写连接字符串)
光有钥匙胚和齿还不够,你这把钥匙的齿形、长短得跟锁芯匹配,这个匹配信息就是 连接字符串。
连接字符串就是一长串文本,它告诉程序:
- 数据库在哪台电脑上(服务器地址)
- 数据库叫啥名字
- 用什么账号密码登录
- 还有其他一些设置(比如超时时间等)
它长这个样子(以 SQL Server 为例):
"Server=你的服务器名或IP地址;Database=你的数据库名;User Id=你的用户名;Password=你的密码;"
或者用本地服务器和Windows账户登录:
"Server=(localdb)\\MSSQLLocalDB;Database=我的数据库;Trusted_Connection=true;"
这个字符串非常关键,写错一个字都连不上! 那把它写在哪呢?绝对不能直接硬写在代码里!最好的地方是项目的配置文件 appsettings.json。

- 打开你项目里的
appsettings.json文件。 - 添加一个配置项,
{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=MyAppDb;Trusted_Connection=true;" }, "其他配置...": "..." }这里我把它放在了
ConnectionStrings这个节点下,名字叫DefaultConnection。
为什么放这里? 因为这样安全(你的密码不会暴露在代码里),而且方便切换(比如开发用一个数据库,上线换另一个,改配置文件就行了,不用重新编译代码)。(来源:.NET 配置最佳实践)
第三步:学会开锁和关锁的动作(用代码连接和断开)
钥匙和锁都准备好了,现在学动作,在 .NET 里,操作数据库的核心是几个类,它们就像你的手和钥匙。
- SqlConnection:这个类就代表“连接”这个动作,你把它想象成“手拿钥匙对准锁眼”这个姿态。
- SqlCommand:这个类代表你要对数据库“下什么指令”,查询数据”或者“插入新数据”,就像你是要“开门”还是“锁门”。
- SqlDataReader:如果你是要查询数据,这个类就像从门里拿出来的“东西”,你可以一件件查看。
- using 语句:这是最重要的! 它保证无论发生什么(哪怕中途出错),你的数据库连接都会被关闭,就像保证你用完钥匙一定会拔出来,不会把锁弄坏。
来看一段最标准的代码是怎么写的(假设我们已经在 appsettings.json 里配好了连接字符串):
// 1. 从配置文件中读取连接字符串
// 需要先配置好依赖注入,在Program.cs里有了,这里可以直接用
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// 2. 创建连接对象
// 使用 using 关键字,确保连接一定会被关闭
using (var connection = new SqlConnection(connectionString))
{
// 3. 编写你要执行的SQL语句
string sql = "SELECT Id, Name FROM Users WHERE Id = @UserId"; // @UserId 是参数,防止SQL注入攻击
// 4. 创建一个命令对象,把连接和SQL语句关联起来
using (var command = new SqlCommand(sql, connection))
{
// 5. 给SQL语句里的参数赋值(非常重要,安全!)
command.Parameters.AddWithValue("@UserId", 1);
// 6. 真正打开连接(钥匙插进锁眼,转动)
connection.Open();
// 7. 执行命令,如果是查询,用 ExecuteReader
using (var reader = command.ExecuteReader())
{
// 8. 如果有数据返回,就一行行读取
while (reader.Read())
{
int id = reader.GetInt32("Id");
string name = reader.GetString("Name");
Console.WriteLine($"ID: {id}, Name: {name}");
}
} // reader 在这里会自动被释放
} // command 在这里会自动被释放
} // connection 在这里会自动关闭!这是 using 关键字的作用。
划重点:
- 一定要用
using:把创建连接、命令、读取器的代码都包在using里,这是好习惯,能避免资源泄露。 - 一定要用参数:就像例子里的
@UserId,不要把用户输入的值直接拼接到SQL语句里,否则有严重的安全风险(SQL注入攻击)。 - 按顺序操作:创建连接 -> 创建命令 -> 打开连接 -> 执行命令 -> 处理结果 -> (using自动)关闭。
第四步:更现代、更省事的办法(使用ORM - Entity Framework)
如果你觉得上面这种“手动开锁”的方式太麻烦,还要写SQL语句,.NET 提供了一个“智能门禁系统”,叫 Entity Framework Core (EF Core)。
EF Core 让你可以不用写繁琐的SQL语句,而是直接操作C#的类(模型)来管理数据库,比如你定义一个 User 类,EF Core 能帮你自动在数据库里创建对应的表,你增删改查 User 对象就等于在操作数据库。

这就像你不需要关心钥匙怎么转动,只需要对门禁系统说“开门”,或者刷卡就行,虽然底层还是在我们上面讲的那些步骤,但EF Core帮你把脏活累活都干了。
简单举个例子:
-
定义模型(用户类):
public class User { public int Id { get; set; } public string Name { get; set; } } -
定义数据库上下文(告诉EF Core你的模型和数据库的对应关系):
public class MyDbContext : DbContext { public DbSet<User> Users { get; set; } // 表示数据库中有一个Users表,对应User类 // 配置连接字符串,通常也是在构造函数里通过选项注入 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("你的连接字符串"); } } -
使用它:
using (var context = new MyDbContext()) { // 查询ID为1的用户 var user = context.Users.Find(1); Console.WriteLine(user.Name); // 添加一个新用户 var newUser = new User { Name = "张三" }; context.Users.Add(newUser); context.SaveChanges(); // 保存到数据库 }
是不是看起来像在操作内存里的集合,非常简单?对于新项目,强烈推荐直接从 EF Core 开始学起。 (来源:Entity Framework Core 官方文档)
总结一下
.NET 连接数据库的正确姿势:
- 选驱动:根据数据库类型,用 NuGet 安装对应的驱动包。
- 配钥匙:把包含服务器、数据库名、账号密码的连接字符串安全地放在
appsettings.json里。 - 写代码:
- 原始派:用
SqlConnection,SqlCommand,并且一定要放在using语句里,一定要使用参数化查询。 - 现代派:直接使用 Entity Framework Core,以面向对象的方式操作数据库,更高效更安全。
- 原始派:用
希望这个“开锁”的比喻能让你彻底明白该怎么弄,先从理解原始方法开始,然后尽快转向使用 EF Core,这是目前最主流和推荐的做法。
本文由召安青于2026-01-14发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/80818.html
