IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> C#:SQL语句&LINQ语句与实现数据库的增删改查 EFCore -> 正文阅读

[大数据]C#:SQL语句&LINQ语句与实现数据库的增删改查 EFCore


1、操作DBContext类的对象,实现SQL语句的执行=>创建表

 using (MyDatabaseEntities db = new MyDatabaseEntities())
            {
                // ExecuteSqlCommand()方法:用于执行数据的增删改,以及创建表、删除表操作
                // 返回值:
                // 1)当执行的是增删改时,如果操作成功,返回“受影响的行数”,如果操作失败,返回小于0的值
                // 2)当执行创建表或删除表时,如果操作成功,返回-1,操作失败返回其它值
                // LINQ不能完成表的创建
                string sql = "create table ProductUser(id int primary key not null,account varchar(10),password varchar(10))";
                var result = db.Database.ExecuteSqlCommand(sql);
                Console.WriteLine(result);
                Console.ReadKey();
            }

在执行数据的增删改时,都可以使用占位符

2、实现数据的添加操作

方法1:

 			using (MyDatabaseEntities db = new MyDatabaseEntities())
            {
                // string sql = "insert into ProductUser values(1,'tom','1234')"; // 添加一条数据
                // 一次性添加多条数据
                string sql = "insert into ProductUser select 2,'zhangsan','555' union select 3,'jeny','666' union select 4,'smith','000'";
                var result = db.Database.ExecuteSqlCommand(sql);
                Console.WriteLine(result);
                Console.ReadKey();
            }

方法2:

			// 添加数据==>插入操作
            // 1.创建DBContext对象,调用Add()方法添加数据,完成之后,一定要执行SaveChanges()方法
            using (meixinEntities db = new meixinEntities())
            {
                // 添加的数据必须以实体模型(user)的对象的形式创建
                m_user u = new m_user()
                {
                    // 数据库中id为自增长,故不需要增加数据
                    email = "157299@qq.com",
                    pwd = "666",
                    logintime = DateTime.Now
                };
                // Add()添加数据时,只是将数据提交到内存,并没有提交到数据库
                db.m_user.Add(u);
                // 对数据库的操作(包括数据的增删改查)完成之后,一定要执行SaveChanges()方法
                // 这样数据才会提交到数据库
                db.SaveChanges();
            }

3、实现数据的更新

方法1:

            using (MyDatabaseEntities db = new MyDatabaseEntities())
            {
                // string sql = "update ProductUser set password='9999' where account='tom'"; 更新一条数据
                // var result = db.Database.ExecuteSqlCommand(sql);
                // @pwd1,@acc1,@pwd2,@acc2占位符变量,代表的含义是占位符所在位置的值待定
                string sql = "update ProductUser set password=@pwd1 where account=@acc1;update ProductUser set password=@pwd2 where account=@acc2";
                SqlParameter[] para = {
                    new SqlParameter("@pwd1","abbbbb"),
                    new SqlParameter("@acc1","tom"),
                    new SqlParameter("@pwd2","baaaaa"),
                    new SqlParameter("@acc2","smith")
                };
                var result = db.Database.ExecuteSqlCommand(sql, para);
                Console.WriteLine(result);
                Console.ReadKey();
            }

方法2:

// 更新数据
            // 1.创建DBContext对象,通过查询找到要修改的实体对象,修改它对应的属性
            // 完成之后,一定要执行SaveChanges()方法
            using (meixinEntities db = new meixinEntities())
            {
                // 通过查询找到要更新的实体对象(找到要修改的记录)
                var result = db.m_user.FirstOrDefault(s => s.email == "efg@qq.com");
                // 得到的是m_user类型的变量,直接修改其对应的属性即可实现数据的更新
                result.email = "hahaha@edu.cn";
                result.pwd = "6666";
                db.SaveChanges();
            }

4、实现数据的删除

SQL语言删除数据库中的表:(慎用)

            using (MyDatabaseEntities db = new MyDatabaseEntities())
            {
                string sql = "drop table ProductUser";
                var result = db.Database.ExecuteSqlCommand(sql);
            }

// 查询的操作
            // LINQ和SQL都可以完成查询工作,但是SQL的效率更高,因为LINQ在后台编译的时候还是转换成了SQL语言
            // SqlQuery()此方法用于执行查询操作,返回值类型可以是集合、单个对象、数字
            /*using (MyDatabaseEntities db = new MyDatabaseEntities())
            {
                #region 查询数据
                 这里的*表示查询符合条件的所有数据
                //string sql = "select * from ProductUser where account='tom'";  // 查询所有符合条件的对象
                 因为项目最初连接的是一个空的数据库,这里未能显示出数据库中的表
                 要在Models.edmx中空白处右击(从数据库更新模型)导入ProductUser表,然后右击EF Upper生成一下
                //var result = db.Database.SqlQuery<ProductUser>(sql).ToList();   // 加上ToList()立即执行,不加的话,延迟执行,等foreach循环遍历的时候才执行
                //foreach (var item in result)
                //{
                //    // result为查询到的集合
                //    // 点出每一行中对应的属性
                //    Console.WriteLine(item.account);
                //    Console.ReadKey();
                //}
                #endregion

                // 查询并修改查询到的数据
                string sql = "select * from ProductUser where id>3";
                var result= db.Database.SqlQuery<ProductUser>(sql).FirstOrDefault();
                result.account = "kity";
                // 注意不能更改id的值,会抛异常
                result.password = "123456789";
                // 将实体状态修改为Modified后,才可以执行SaveChanges()方法修改数据库中的数据
                db.Entry<ProductUser>(result).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }*/

LINQ删除数据库中的数据:

// 删除数据
            // 1.创建DBContext对象,调用Remove()方法删除数据,完成之后,一定要执行SaveChanges()方法
            using (meixinEntities db= new meixinEntities())
            {
                // 通过查询找到要删除的记录
                var result = db.m_user.FirstOrDefault(s => s.email == "abc@163.com");       // Where(s => s.email == "abc@163.com").Select(s => s);这种操作会产生一个集合
                db.m_user.Remove(result);                               // 注意这里需要的是一个m_user的实体,而不是一个集合
                db.SaveChanges();
                DataBind();
            }

总结:一个接口+一个实现

public interface IStudentRepository
    {
        // 接口:管理模型数据


        Student GetStudentById(int id);  // 通过ID获取学生信息

        // 返回所有学生的列表信息
        IEnumerable<Student> GetAllStudents();
        / <summary>
        / 添加新学生
        / </summary>
        / <param name="student"></param>
        / <returns></returns>
        //Student Add(Student student);

        /// <summary>
        /// 添加学生信息
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        Student Insert(Student student);
        /// <summary>
        /// 修改学生信息
        /// </summary>
        /// <param name="updateStudent"></param>
        /// <returns></returns>
        Student Update(Student updateStudent);
        /// <summary>
        /// 删除学生信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Student Delete(int id);
    }
/// <summary>
    /// 步骤:1.创建DbContext类的对象,通过它操作数据库 2.通过DbContext对象的方法实现数据库操作
    /// </summary>
    public class SQLStudentRepository : IStudentRepository
    {
        private readonly AppDbContext _context; // 模拟一个全局变量来调用别的成员
        public SQLStudentRepository(AppDbContext context)
        {
            _context = context;
        }
        public Student Delete(int id)
        {
            // 通过查询找到要删除的记录
            Student student = _context.Students.Find(id);   // Where(s => s.email == "abc@163.com").Select(s => s);这种操作会产生一个集合
            if (student != null)
            {
                // DbContext对象调用Remove()方法删除数据,需要的是一个实体,这里也就是需要一个Student实体,而不是一个集合
                _context.Students.Remove(student); 
                _context.SaveChanges();
            }
            return student;
        }

        public IEnumerable<Student> GetAllStudents()
        {
            return _context.Students;
        }

        public Student GetStudentById(int id)
        {
            return _context.Students.Find(id);
        }
        /// <summary>
        /// 添加数据==插入操作
        /// 1.创建DbContext对象,调用Add()方法添加数据,完成之后,一定要执行SaveChanges()方法
        /// 2.DbContext对象赋值给了_context,则使用_context.实体模型(Student).Add()方法
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        public Student Insert(Student student)
        {
            // Add()添加数据的时候,只是将数据提交到内存,并没有提交到数据库
            _context.Students.Add(student);
            // 对数据库的操作(包括数据的增删改查)完成之后,一定要执行SaveChanges()方法
            // 这样数据才会提交到数据库
            _context.SaveChanges();
            return student;
        }

        public Student Update(Student updateStudent)
        {
            var student = _context.Students.Attach(updateStudent);
            // 将实体状态修改为Modified后,才可以执行SaveChanges()方法修改数据库中的数据
            student.State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            _context.SaveChanges();
            return updateStudent;
        }
    }

注意

在appsettings.json配置文件中,添加如下代码,以便读取数据库连接字符串:
“ConnectionStrings”: { “WebStudentDBConnection”: “server=(localdb)\MSSQLLocalDB;database=StudentDB;Trusted_Connection=true” },
该代码localdb表示访问本地数据库,即VS自带数据库,database表示数据库名称,最后一项表示集成windows身份验证连接到sql server。如果使用非本地的SQL Server,则需要更改连接字符串。

在setup类中的依赖注入服务类ConfigureService方法中,连接数据库

// 使用SQLServer数据库,通过IConfiguration访问去获取,自定义名称的Web
            // StudentDBConnection作为我们的连接字符串  连接到数据库,将数据库连接字符串作为参数添加到UseSqlServer()扩展方法中
            services.AddDbContextPool<AppDbContext>(options=>options.UseSqlServer(_configuration.GetConnectionString("WebStudentDBConnection")));
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:18:23  更:2022-06-01 15:21:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:33:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码