一、MVC项目目录简介
- APP_Data:
- App_Start:
- Content:
- Controllers:
- Fonts:
- Modules:
- Scripts:
- Views:
二、来自数据库的CodeFirst方式
1、从数据库生成Model
右击Models-添加-新建项-ADO.NET 实体数据模型2、新建Controller及视图页
参考别人的步骤,但是vs2019没有以下选项。 Controllers-右击-新增-控制器-包含视图的MVC5控制器(使用Entity Framework)选择添加,然后选择模型类,点击添加就完成了。
3、运行项目
Ctrl+F5运行项目,会自动打开浏览器,将url后面改为/User/Index三、使用ado.net代码连接数据库
右键数据库的属性:
把连接字符串复制下来,打开web.config文件,找到connectionStrings标签
注意:如果自己添加的connectionString标签,请再次确认webconfig文件中是否有connectionString标签。两个connectionString标签存在会报错
接下来用代码操作数据库,我直接在控制器中写了
- 先引入三个命名空间
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
- 在控制器中写代码
public class MainController : Controller
{
// GET: Main
public ActionResult Index()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("select * from student", conn);
cmd.CommandType = CommandType.Text;
SqlDataReader sqldr = cmd.ExecuteReader();
while(sqldr.Read())
{
ViewBag.sno = sqldr["sno"];
ViewBag.spwd = sqldr["spwd"];
}
conn.Close();
return View();
}
}
3.在视图层引用ViewBag.sno和 ViewBag.spwd
4.界面显示
我这里的代码还有点问题,就是只取出了最后一条数据,这里只证实数据库连接成功了,具体怎么增删改查请看第五点.
四、来自数据库的EF设计器模式
右键项目名->添加->新建项 出现下面界面:
选择ado.net实体数据模型,可以命名一下名称,我这里就不重新命名了,然后点击添加
添加完成后 选择实体数据模型向导
点击下一步
点击下一步
在目录下找到你新建的数据模型目录
可以看到这里有个xuankeEntities,这个对象可以声明成全局的上下文
xuankeEntities db = new xuankeEntities();
如上可以根据db这个对象实现数据的增删改查,以登陆界面的账号密码验证为例:
var result = from item in db.student
where item.sno == 'admin' && item.spwd == '123456'
select item;
if(result.Count()>0)
{
//加载到主界面
}
student是连接的数据库下的一个表,item可以自己随便命名,这段代码的意思是:
搜索学号为 admin 并且 密码为 “123456” 的学生信息返回给result,如果返回的result的信息数大于0,就代表有这个学生的信息,就转到主界面,代表登录成功。
五、使用ADO.NET实体数据模型实现简单增删改查
声明一个 EF的上下文.(这个上下文指向数据库)
StudentEntities dbContext = new StudentEntities();
1、增
//声明一个实体,并赋值
Students stu = new Students();
stu.StudentName = "李四";
stu.StudentSex = "男";
stu.StudentAge = 19;
stu.StudentProvince = "上海";
stu.StudentPhone = "17468523001";
//写法一:
//dbContext.Students.Add(stu);
//写法二:
dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Added;
//告诉上下文把实体的变化保存到数据库里面去,返回受影响行数
int i = dbContext.SaveChanges(); //三元表达式
string str = i == 1 ? "添加成功" : "添加失败";
Console.WriteLine(str);
2、删
Students stu = new Students();
stu.StudentNO = 1833200159;
dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Deleted;
int i = dbContext.SaveChanges();
string str = i == 1 ? "删除成功" : "删除失败";
Console.WriteLine(str);
3、修改整条数据
Students stu = new Students();
stu.StudentNO = 1833200160;
stu.StudentName = "赵六";
stu.StudentSex = "男";
stu.StudentAge = 20;
stu.StudentProvince = "广州";
stu.StudentPhone = "18654257894";
dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Modified;
int i = dbContext.SaveChanges();
string str = i == 1 ? "修改成功" : "修改失败";
Console.WriteLine(str);
4、修改单个属性
Students stu = new Students();
stu.StudentNO = 1833200160;
stu.StudentName = "露丝";
stu.StudentAge = 0;
stu.StudentSex = "女";
stu.StudentProvince = "";
stu.StudentPhone = "";
//将当前实例附加到上下文来处理
dbContext.Students.Attach(stu);
//写法一:
//这里修改了名字和性别,因为其他的属性字段是不可空的所以为了通过验证必须
//赋值(赋上了任意的值,但是我们并没有保存这些更改)
//dbContext.Entry<Students>(stu).Property("StudentName").IsModified = true;
//dbContext.Entry<Students>(stu).Property("StudentSex").IsModified = true;
//写法二:Lambda表达式
dbContext.Entry<Students>(stu).Property<string>(s => s.StudentName).IsModified = true;
dbContext.Entry<Students>(stu).Property<string>(s => s.StudentSex).IsModified = true;
int i = dbContext.SaveChanges();
string str = i == 1 ? "修改成功" : "修改失败";
Console.WriteLine(str);
5、查询整张数据表
foreach (var item in dbContext.Students)
{
//打印整张表的学号和姓名
Console.WriteLine("学号: " + item.StudentNO + " 姓名: " + item.StudentName);
}
6、Linp表达式按条件查询数据
//查询整张表女生的信息
var temp = from s in dbContext.Students
where s.StudentSex == "女"
select s;
foreach (var item in temp)
{
//打印女生的信息
Console.WriteLine(item.StudentName);
}