前言
实际开发中,我们往往已经又了数据库,这个时候再用Code First就不合适。
所以本章我们要学习如何连接外部数据库。
Database First
Database First 模式就是在开发过程中,先设计数据库,然后开发人员再根据数据库开发软件,一般来说,开发过程中不能排除更改数据结构的可能性,而数据库一旦发生改变,就意味着大量的代码需要改动,既浪费时间,也显得不灵活,不太符合MVC的思想。
但是作为数据库的初学者,很有必要了解Database First开发模式,这样便于理解整个数据库的运作方式,夯实基础。
数据库
数据库是一门很庞大的知识体系,这里不讲,不过大家需要记住的是,数据库是用来存储数据的,通常他不具有管理界面,所以他需要专门的管理工具。
数据库有很多种,Oracle,SQL Server,my sql等等等等,他们之间大致相同又各有不同,安装,建立数据库的过程我们就不讲了,有时间以后在总结,这里只是简单介绍几种。
SQL Server
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 10 的大型多处理器的服务器等多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。
Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
LocalDB
随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本。
LocalDB专门为开发人员创建,它非常易于安装,几乎无需管理,兼容T-SQL语言,编程接口与SQL Server Express别无二致。有了LocalDB,开发人员就不需要在自己的笔记本上安装和维护一个庞大的SQL Server实例了。另外,LocalDB也适用于小型应用环境,开发人员可以将其用于小型生产环境或者嵌入式环境。
Visual Studio 2012及以后的IDE,安装后都默认都安装了LocalDB,根据VS版本不同,相应的LocalDB版本就不同。
数据库管理工具
上面我们说了,数据库本身不负责与用户互交,所以还需要专门的管理工具来完成管理工作。
我们可以通过 VS 直接管理数据库,也可以使用SQL Server Management Studio(SSMS)管理。
SQL Server 对象资源管理器
从VS2015开始,提供了SQL Server 对象资源管理器,可以十分方便的对SQL Server进行管理。
点击 视图 —> SQL Server 对象资源管理器 就可以打开它。
SMSS
SMSS 即 sql server management studio,是微软推出的一款专门管理,修改sql数据库的集成化管理环境。
微软官网就提供免费的下载安装服务。
数据库连接
要连接一个数据库,必须要有下面几个关键信息:
- 服务器地址
- 账号密码
假设这些信息我们都已经得到,就可以连接访问数据库了。
VS连接数据库
打开服务器资源管理器,右键点击数据连接,填写正确的信息后按确定,就可以成功连接数据。
然后我们在邮件点击这个数据连接 —> 属性,把连接字符串这个属性的内容复制下来。
这里我们得到:
Data Source=192.168.3.121,3232;
Initial Catalog=KfTest;
Persist Security Info=True;
User ID=kftest;
Password=kf12345
项目连接数据库
VS 数据连接成功,并不代表我们的项目也连接到数据库,要使MVC项目和数据库对接,我们还需要修改一些文件。
~/Web.config
中,有类似这样的代码段:
<connectionStrings>
<add name="MvcDemoContext" connectionString="Data Source=(localdb)\MSSQLLocalDB; Initial Catalog=MvcDemoContext-20181212163752; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|MvcDemoContext-20181212163752.mdf"
providerName="System.Data.SqlClient" />
</connectionStrings>
如果没有也没关系,可以自己添加。
<connectionStrings>
<add name="MvcDemoContext" connectionString="Data Source=(localdb)\MSSQLLocalDB; Initial Catalog=MvcDemoContext-20181212163752; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|MvcDemoContext-20181212163752.mdf"
providerName="System.Data.SqlClient" />
<-- 这是新添加的数据库连接>
<add name ="test" connectionString="Data Source=192.168.3.121,3232;Initial Catalog=KfTest;Persist Security Info=True;User ID=kftest;Password=kf12345"/>
</connectionStrings>
其中:
name: 连接名称,类似于变量名,方便后面引用这个连接。
connectionString:连接字段,负责具体的参数设置。
其中:
- Data Source:数据库服务器的地址
- Initial Catalog: 数据库文件的名字
所有信息都填写正确后,我们的程序就已经连接上数据库了。
获取信息
大致的思路就是
创建一个数据库命令的对象 cmd
设置这个对象 命令的具体内容 也就是 CommandText属性
然后执行 ExecuteReader方法 获得一个 读对象SqlDataReader
//创建一个命令
SqlCommand cmd = sqldb.CreateCommand();
//写SQL语句
cmd.CommandText = "SELECT * FROM Stations";
//执行 来进行读取
SqlDataReader reader = cmd.ExecuteReader();
//这里应该是相应的实体类, 比如我这里的泛型中应该填User类
List<string> l = new List<string>();
while (reader.Read())
{
//为了简单起见, 只获取用户名测试
string name = reader.GetString(reader.GetOrdinal("user_name"));
//把获取的值 保存到一个 list中 在Controller中调用此方法, 可以获得一个存有数据的 list
l.Add(name);
}
总之,对数据库的操作使用的还是sql语句,剩下的就看你自己怎么包装了。