当前位置:首页 > 问答 > 正文

.net连接数据库到底怎么弄才对,步骤方法简单讲解分享

搞清楚你要开哪把锁(选择数据库和驱动)

.NET 本身就像一个万能钥匙胚,但它不能直接开所有的锁,你需要根据数据库的类型,给它装上对应的“钥匙齿”,这个“钥匙齿”数据库驱动 或者叫 数据提供程序

常见的几种锁和对应的钥匙齿:

  1. SQL Server:这是微软自家的,配合最好,你的钥匙齿就是 System.Data.SqlClient(老一点)或者 Microsoft.Data.SqlClient(新推荐),你需要在项目里通过 NuGet 安装这个包。

    • 怎么装? 在Visual Studio里,右键点击你的项目 -> “管理 NuGet 程序包” -> 浏览 -> 搜索 Microsoft.Data.SqlClient -> 点击安装,这就好比是给钥匙胚装上了开SQL Server锁的齿。
  2. MySQL:也很常用,钥匙齿是 MySql.DataMySqlConnector,同样,通过 NuGet 安装,我个人更推荐 MySqlConnector,据说性能更好一些。

  3. SQLite:轻量级的文件数据库,就像一个小抽屉的锁,钥匙齿是 System.Data.SQLiteMicrosoft.Data.Sqlite,NuGet 安装。

  4. PostgreSQL:钥匙齿是 Npgsql,NuGet 安装。

不管你用哪种数据库,第一步永远是把这个对应的“驱动”包安装到你的项目里。 (来源:基于 .NET 开发基础常识)

第二步:配一把正确的钥匙(写连接字符串)

光有钥匙胚和齿还不够,你这把钥匙的齿形、长短得跟锁芯匹配,这个匹配信息就是 连接字符串

连接字符串就是一长串文本,它告诉程序:

  • 数据库在哪台电脑上(服务器地址)
  • 数据库叫啥名字
  • 用什么账号密码登录
  • 还有其他一些设置(比如超时时间等)

它长这个样子(以 SQL Server 为例):

"Server=你的服务器名或IP地址;Database=你的数据库名;User Id=你的用户名;Password=你的密码;"

或者用本地服务器和Windows账户登录:

"Server=(localdb)\\MSSQLLocalDB;Database=我的数据库;Trusted_Connection=true;"

这个字符串非常关键,写错一个字都连不上! 那把它写在哪呢?绝对不能直接硬写在代码里!最好的地方是项目的配置文件 appsettings.json

.net连接数据库到底怎么弄才对,步骤方法简单讲解分享

  1. 打开你项目里的 appsettings.json 文件。
  2. 添加一个配置项,
    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=.;Database=MyAppDb;Trusted_Connection=true;"
      },
      "其他配置...": "..."
    }

    这里我把它放在了 ConnectionStrings 这个节点下,名字叫 DefaultConnection

为什么放这里? 因为这样安全(你的密码不会暴露在代码里),而且方便切换(比如开发用一个数据库,上线换另一个,改配置文件就行了,不用重新编译代码)。(来源:.NET 配置最佳实践)

第三步:学会开锁和关锁的动作(用代码连接和断开)

钥匙和锁都准备好了,现在学动作,在 .NET 里,操作数据库的核心是几个类,它们就像你的手和钥匙。

  1. SqlConnection:这个类就代表“连接”这个动作,你把它想象成“手拿钥匙对准锁眼”这个姿态。
  2. SqlCommand:这个类代表你要对数据库“下什么指令”,查询数据”或者“插入新数据”,就像你是要“开门”还是“锁门”。
  3. SqlDataReader:如果你是要查询数据,这个类就像从门里拿出来的“东西”,你可以一件件查看。
  4. 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 对象就等于在操作数据库。

.net连接数据库到底怎么弄才对,步骤方法简单讲解分享

这就像你不需要关心钥匙怎么转动,只需要对门禁系统说“开门”,或者刷卡就行,虽然底层还是在我们上面讲的那些步骤,但EF Core帮你把脏活累活都干了。

简单举个例子:

  1. 定义模型(用户类):

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
  2. 定义数据库上下文(告诉EF Core你的模型和数据库的对应关系):

    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; } // 表示数据库中有一个Users表,对应User类
        // 配置连接字符串,通常也是在构造函数里通过选项注入
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("你的连接字符串");
        }
    }
  3. 使用它:

    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 连接数据库的正确姿势:

  1. 选驱动:根据数据库类型,用 NuGet 安装对应的驱动包。
  2. 配钥匙:把包含服务器、数据库名、账号密码的连接字符串安全地放在 appsettings.json 里。
  3. 写代码
    • 原始派:用 SqlConnectionSqlCommand,并且一定要放在 using 语句里,一定要使用参数化查询。
    • 现代派:直接使用 Entity Framework Core,以面向对象的方式操作数据库,更高效更安全。

希望这个“开锁”的比喻能让你彻底明白该怎么弄,先从理解原始方法开始,然后尽快转向使用 EF Core,这是目前最主流和推荐的做法。