一、MVC项目目录简介

  1. APP_Data:
ASP.NET的特殊目录,存放于此的文件无法被下载,通常会将文件型数据和自定义的配置文件放置在此。
  1. App_Start:
ASP.NET MVC的配置文件都放置在此。 1.BundleConfig.cs: CSS 与JavaScript捆绑的最小化配置文件。 2.FilterConfig.cs: 全局的动作过滤配置文件,默认已经加入HandleErrorAttribute。 3.RouteConfig.cs:网址路由配置文件。 4.Startup.Auth.cs:集成验证OAuth配置文件。
  1. Content:
静态文件都放置于此,通常为css或txt。 1.bootstrap.css: ASP.NET MVC5默认已经使用了bootstrap3.0版本。 2.bootstrap.min.css:bootstrap3.0最小化版本的css文件。 3.Site.css:MVC 范本的CSS文件。
  1. Controllers:
控制器。 1.AccountController.cs: 提供基本的会员机制范例程序代码。 2.HomeController.cs: 基本的控制器,也是默认的主页控制器。
  1. Fonts:
bootstrap 使用的图标字型文件夹。
  1. Modules:
模型。 AccountViewModels.cs:会员机制用到的ViewModel。 IdentityModels.cs:新的验证机制使用的模型。
  1. Scripts:
网站所需要的JavaScript都放置在此。
  1. Views:
视图。 1.Account:对应AccountController 的视图页面都放置在此。 2.Home:对应HomeController的视图页面。 3.Shared:网站内共享的视图页面。 4.package.config:项目程序包配置文件,还原程序包所必须的文件。 5.Project_Readme.html:新建项目的欢迎页面。 6.Startup.cs:OWIN的配置文件。

二、来自数据库的CodeFirst方式

1、从数据库生成Model

右击Models-添加-新建项-ADO.NET 实体数据模型

.NET MVC | 连接sqlserver数据库(CRUD) - 图1

点击添加并选择来自数据库的Code First

.NET MVC | 连接sqlserver数据库(CRUD) - 图2

点击下一步并选择数据库连接,点击下一步

.NET MVC | 连接sqlserver数据库(CRUD) - 图3

选择要生成的表,这里是User表

.NET MVC | 连接sqlserver数据库(CRUD) - 图4

点击完成。

.NET MVC | 连接sqlserver数据库(CRUD) - 图5

2、新建Controller及视图页

参考别人的步骤,但是vs2019没有以下选项。 Controllers-右击-新增-控制器-包含视图的MVC5控制器(使用Entity Framework)

.NET MVC | 连接sqlserver数据库(CRUD) - 图6

点击添加,更改控制器名字以及模型类和模型上下文类,与上面新建的model对应

.NET MVC | 连接sqlserver数据库(CRUD) - 图7

vs2019选择如下: controller正常创建,创建视图的时候在controller直接右键“添加视图”

.NET MVC | 连接sqlserver数据库(CRUD) - 图8

选择添加,然后选择模型类,点击添加就完成了。

.NET MVC | 连接sqlserver数据库(CRUD) - 图9

3、运行项目

Ctrl+F5运行项目,会自动打开浏览器,将url后面改为/User/Index

.NET MVC | 连接sqlserver数据库(CRUD) - 图10

点击Create New

.NET MVC | 连接sqlserver数据库(CRUD) - 图11

点击Create

.NET MVC | 连接sqlserver数据库(CRUD) - 图12

新增成功,可以对其进行编辑和删除操作,此时打开Navicat查看数据库

三、使用ado.net代码连接数据库

右键数据库的属性:

.NET MVC | 连接sqlserver数据库(CRUD) - 图13

把连接字符串复制下来,打开web.config文件,找到connectionStrings标签

.NET MVC | 连接sqlserver数据库(CRUD) - 图14

注意:如果自己添加的connectionString标签,请再次确认webconfig文件中是否有connectionString标签。两个connectionString标签存在会报错

接下来用代码操作数据库,我直接在控制器中写了

  1. 先引入三个命名空间
  1. using System.Data;
  2. using System.Data.SqlClient;
  3. using System.Configuration;
  1. 在控制器中写代码
  1. public class MainController : Controller
  2. {
  3. // GET: Main
  4. public ActionResult Index()
  5. {
  6. SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
  7. conn.Open();
  8. SqlCommand cmd = new SqlCommand("select * from student", conn);
  9. cmd.CommandType = CommandType.Text;
  10. SqlDataReader sqldr = cmd.ExecuteReader();
  11. while(sqldr.Read())
  12. {
  13. ViewBag.sno = sqldr["sno"];
  14. ViewBag.spwd = sqldr["spwd"];
  15. }
  16. conn.Close();
  17. return View();
  18. }
  19. }

3.在视图层引用ViewBag.sno和 ViewBag.spwd

.NET MVC | 连接sqlserver数据库(CRUD) - 图15

4.界面显示

.NET MVC | 连接sqlserver数据库(CRUD) - 图16

我这里的代码还有点问题,就是只取出了最后一条数据,这里只证实数据库连接成功了,具体怎么增删改查请看第五点.

四、来自数据库的EF设计器模式

右键项目名->添加->新建项 出现下面界面:

选择ado.net实体数据模型,可以命名一下名称,我这里就不重新命名了,然后点击添加

.NET MVC | 连接sqlserver数据库(CRUD) - 图17

添加完成后 选择实体数据模型向导

.NET MVC | 连接sqlserver数据库(CRUD) - 图18

点击下一步

.NET MVC | 连接sqlserver数据库(CRUD) - 图19

点击下一步

.NET MVC | 连接sqlserver数据库(CRUD) - 图20

在目录下找到你新建的数据模型目录

.NET MVC | 连接sqlserver数据库(CRUD) - 图21

可以看到这里有个xuankeEntities,这个对象可以声明成全局的上下文

  1. xuankeEntities db = new xuankeEntities();

如上可以根据db这个对象实现数据的增删改查,以登陆界面的账号密码验证为例:

  1. var result = from item in db.student
  2. where item.sno == 'admin' && item.spwd == '123456'
  3. select item;
  4. if(result.Count()>0)
  5. {
  6. //加载到主界面
  7. }

student是连接的数据库下的一个表,item可以自己随便命名,这段代码的意思是:

搜索学号为 admin 并且 密码为 “123456” 的学生信息返回给result,如果返回的result的信息数大于0,就代表有这个学生的信息,就转到主界面,代表登录成功。

五、使用ADO.NET实体数据模型实现简单增删改查

声明一个 EF的上下文.(这个上下文指向数据库)

.NET MVC | 连接sqlserver数据库(CRUD) - 图22

这个对象可以声明成全局的上下文
  1. StudentEntities dbContext = new StudentEntities();

1、增

  1. //声明一个实体,并赋值
  2. Students stu = new Students();
  3. stu.StudentName = "李四";
  4. stu.StudentSex = "男";
  5. stu.StudentAge = 19;
  6. stu.StudentProvince = "上海";
  7. stu.StudentPhone = "17468523001";
  8. //写法一:
  9. //dbContext.Students.Add(stu);
  10. //写法二:
  11. dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Added;
  12. //告诉上下文把实体的变化保存到数据库里面去,返回受影响行数
  13. int i = dbContext.SaveChanges();        //三元表达式
  14. string str = i == 1 ? "添加成功" : "添加失败";
  15. Console.WriteLine(str);

2、删

  1. Students stu = new Students();
  2. stu.StudentNO = 1833200159;
  3. dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Deleted;
  4. int i = dbContext.SaveChanges();
  5. string str = i == 1 ? "删除成功" : "删除失败";
  6. Console.WriteLine(str);

3、修改整条数据

  1. Students stu = new Students();
  2. stu.StudentNO = 1833200160;
  3. stu.StudentName = "赵六";
  4. stu.StudentSex = "男";
  5. stu.StudentAge = 20;
  6. stu.StudentProvince = "广州";
  7. stu.StudentPhone = "18654257894";
  8. dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Modified;
  9. int i = dbContext.SaveChanges();
  10. string str = i == 1 ? "修改成功" : "修改失败";
  11. Console.WriteLine(str);

4、修改单个属性

  1. Students stu = new Students();
  2. stu.StudentNO = 1833200160;
  3. stu.StudentName = "露丝";
  4. stu.StudentAge = 0;
  5. stu.StudentSex = "女";
  6. stu.StudentProvince = "";
  7. stu.StudentPhone = "";
  8. //将当前实例附加到上下文来处理
  9. dbContext.Students.Attach(stu);
  10. //写法一:
  11. //这里修改了名字和性别,因为其他的属性字段是不可空的所以为了通过验证必须
  12. //赋值(赋上了任意的值,但是我们并没有保存这些更改)
  13. //dbContext.Entry<Students>(stu).Property("StudentName").IsModified = true;
  14. //dbContext.Entry<Students>(stu).Property("StudentSex").IsModified = true;
  15. //写法二:Lambda表达式
  16. dbContext.Entry<Students>(stu).Property<string>(s => s.StudentName).IsModified = true;
  17. dbContext.Entry<Students>(stu).Property<string>(s => s.StudentSex).IsModified = true;
  18. int i = dbContext.SaveChanges();
  19. string str = i == 1 ? "修改成功" : "修改失败";
  20. Console.WriteLine(str);

5、查询整张数据表

  1. foreach (var item in dbContext.Students)
  2. {
  3. //打印整张表的学号和姓名
  4. Console.WriteLine("学号: " + item.StudentNO + " 姓名: " + item.StudentName);
  5. }

6、Linp表达式按条件查询数据

  1. //查询整张表女生的信息
  2. var temp = from s in dbContext.Students
  3. where s.StudentSex == "女"
  4. select s;
  5. foreach (var item in temp)
  6. {
  7. //打印女生的信息
  8. Console.WriteLine(item.StudentName);
  9. }