C#mvc连接 Sqlite数据库

1选择Sqlite数据库的原因

首先在vs2019中自带SQLServer数据库,数据库创建的位置默认在 “C:\Users\”目录下,如果修改位置将会无法连接到数据库(当然应该也有办法),为了将数据库放置在与工程同文件夹内并且便于打包,同时考虑到Sqlite数据库方便建立和使用的优点,因此选择Sqlite数据库。本文主要讲解如何建立Sqlite数据库,连接以及“播种”(向数据库添加初始数据)的流程(注:以下流程同样适用于连接vs自带的SQL Server)

2建立mvc项目并建立实体类

2.1建立student类包含需要存入数据库的属性

建立一个简单的student实体作为示例,包含了学生的基本信息(年龄,姓名,班级,邮箱)

 public class student
    {
       public int Id { get; set; }

       public int Age { get; set; }

       public string Name { get; set; }

       public string ClassName { get; set; }

       public string Email { get; set; }
    }

2.2建立上下文连接(Dbcontext类)

首先,新建一个类,继承(Dbcontext),可能会出现如下情况,就选择 安装包“Microsoft.EntityFrameworkCore” 安装依赖项,安装5.0.12版本即可,最新版本和3.1不兼容。,安装好后,添加引用 “using Microsoft.EntityFrameworkCore”。

 然后将实体传入Dbset,同时重写OnModelCreating()函数,设置以下两条数据作为初始数据

public class AppDbcontext : DbContext
    {
        //注册将要写入数据库的实体
       public DbSet<student> students { get; set; }
        //构造函数
        public AppDbcontext()
        {

        }
        public AppDbcontext(DbContextOptions<AppDbcontext> options):base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<student>().HasData(
               new student
               {
                   Id = 1,
                   Name = "晓飞",
                   Age = 22,
                   ClassName = "一年级",
                   Email = "5@163.com",
               },
               new student
               {
                   Id = 2,
                   Name = "空气里藏在什么",
                   Age = 42,
                   ClassName = "二年级",
                   Email = "xiaofei@126.com",

               });
        }
    }

2.3设置startup.cs文件

1.首先安装1个包 EntityFrameworkCore.Sqlite,同时添加引用“using Microsoft.EntityFrameworkCore;”

2.建立configuration,便于以后更改设置同时便于添加连接字符串,同样需要添加引用“using Microsoft.Extensions.Configuration;”

 3.注册DbContext服务,AppDbcontext 为上文创建的上下文连接器,如下所示

services.AddDbContext<AppDbcontext>();

4.通过UseSqlite,选择sqlite数据库(若使用sqlserver 则选择UseSqlServer),“student_connection”为连接字符串,名称自取,字符串的内容在下文Appsetting中设置

 通过以上4步完成startup中的设置,接下来完成连接字符串

3完成连接字符串指定数据库位置

连接字符串的设置在appsettings.json文件中,下图完成了一个连接字符串的内容,其中“Data Source=”属于建立sqlite数据库所需的参数,含义为数据源的位置,以“student.db”为名生成一个sqlite数据库,默认位置为项目位置。也可指定固定位置如 "student_connection": "Data Source=C:\\Users\\Desktop\\student.db"。

若是使用sqlserver 其连接字符串如下形式,server表示sqlserver实例,database为数据库名称,默认位置在“ “C:\Users\”,名称可以自定义,位置不可指定

 4生成数据库并添加种子数据

1.首先在Home控制器中添加AppDbcontext变量(或者在需要使用数据库的文件中),随后在构造函数中隐式调用该类实例(调用时会自动生成实例)

2.最重要的一步是_appDbcontext.Database.EnsureCreated(),该方法首先查看是否有该数据库,若有保持不变,若未建立数据库则创建数据库并将OnModelCreating()方法中的种子数据添加到数据库中

 _appDbcontext.Database.EnsureCreated()

 3.通过index方法调用查看数据库中的数据,开始运行后网页显示了数据库中的数据

 同时在项目同文件夹中生成了名称为student.db的数据库

同时也可以在SQLiteStudio中查看该数据库,内容如下键名和种子数据均已经存储到数据库中,并且设置的ID和Age都非空(若想设置键值可空 可在实体中将Age属性改为"public int? Age { get; set; }"即可)

public int? Age { get; set; }

5过程中可能遇到的问题及办法

出现错误“InvalidOperationException: No database provider has been configured for this DbContext. A provider can be configured by overriding the 'DbContext.OnConfiguring' method or by using 'AddDbContext' on the application service provider. If 'AddDbContext' is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.”

可能是 直接利用构造函数显式声明“_appDbcontext = new AppDbcontext();”而在AppDbcontext类中没有重写OnConfiguring()方法。如果想要显式声明,必须要重写OnConfiguring()方法

_appDbcontext = new AppDbcontext()

在startup.cs中则只需注册服务即可,不需连接字符串,亦无须在appsetting.json中设置字符串。

这种方法的缺点在于数据库连接字符串在程序内部,不易修改。 建议如本文一样隐式声明数据库实例,便于更改数据库位置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C#连接SQLite数据库可以使用System.Data.SQLite库,这是一个SQLite3的ADO.NET数据提供程序。以下是连接SQLite数据库的示例代码: ```csharp using System.Data.SQLite; // 设置连接字符串,指定SQLite数据库文件的路径 string connectionString = @"Data Source=C:\mydatabase.db;Version=3;"; // 创建SQLite连接对象 SQLiteConnection connection = new SQLiteConnection(connectionString); // 打开数据库连接 connection.Open(); // 执行SQL语句 SQLiteCommand command = new SQLiteCommand("SELECT * FROM mytable", connection); SQLiteDataReader reader = command.ExecuteReader(); // 读取数据 while (reader.Read()) { string column1 = reader.GetString(0); int column2 = reader.GetInt32(1); // ... } // 关闭数据读取器和连接 reader.Close(); connection.Close(); ``` 在连接串中,Data Source指定SQLite数据库文件的路径,Version指定SQLite的版本号。创建SQLite连接对象后,通过执行SQL语句来操作数据库。使用SQLiteDataReader对象读取数据时,可以通过GetString、GetInt32等方法获取指定列的数据。最后,关闭SQLiteDataReader和连接对象。 ### 回答2: c是C语言的一种编程语言。C语言是一种高级的计算机编程语言,由贝尔实验室的Dennis Ritchie在20世纪70年代开发而来。C语言广泛应用于计算机科学和软件开发领域。 C语言被广泛使用是因为它具有简洁、灵活和高效的特点。它是一种结构化的编程语言,提供了丰富的数据类型和控制结构,使得程序员可以更好地组织和控制程序的流程。C语言还提供了丰富的操作符和库函数,使得编写复杂的算法和数据结构变得更加容易。 C语言还具有可移植性的特点,可以在不同的计算机平台上运行。C语言的程序可以通过简单的修改和重新编译就可以在不同的操作系统和硬件上运行,这使得C语言成为开发跨平台软件的理想选择。 C语言也被广泛应用于系统开发和底层编程。许多操作系统、编译器和数据库系统等底层软件都是使用C语言编写的。C语言的底层编程特性使得程序员可以直接访问和控制计算机的硬件资源,提高了程序的性能和效率。 总之,C语言是一种强大而灵活的编程语言,具有简洁、高效和可移植的特点。它在计算机科学和软件开发领域中得到广泛应用,是学习和掌握计算机编程的重要一步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值