.Net程序员⾯试题分享(EFSql篇)
1、列举出你知道的ORM框架?
答:dapper EntityFramework、 EJB、Hibernate、IBATIS、TopLink、OJB。
2、描述EF的⼏种开发模式。
答: 共三种,但是CodeFirst有⼀种特殊的;
CodeFirstFromDB,代码先⾏,但是实体来时来⾃于数据库!
CodeFirst 领域设计时先定义实体类,⽤实体类⽣成数据库
DbFirst 从数据库⽣成实体类
Model First 使⽤Visual Studio实体设计器,设计ER,同时⽣成Entity类DB
3、如何如何获取EF⽣成的Sql脚本?
答:1.可以调试起来通过SqlServerProfiler 来获取Sql
2.EF Dbcontext 注册⽇志事件输出⽇志查看Sql
4、请说明在哪些类型额项⽬中你会选择EF? 为什么?
答:这个要结合EF的特点来说:EF主要是以⾯向对象的思想来做数据库数据操作,对Sql语句能⼒没什么要求,开发使⽤效率⾼!便于上⼿,⼀般来说,使⽤EF框架,肯定会⽐直接使⽤ADO.NET,消耗的时间多⼀些。 所以在⼀般企业级开发,管理型系统,对数据性能要求不是特别⾼的情况下,优先选择EF,这样可以⼤⼤的推进开发效率!如果像⼀些互联⽹项⽬中,对性能要求精度很⾼!可以另外做技术选型,选择原⽣ADO.Net;
5、如何让EF⽀持事务?
答: EF中操作SaveChange本就是带事务的,⼀般在做增删改查的时候,只有在SaveChange以后才能提交到数据库中去的!同时也可以使⽤Windows系统提供的事务!可以实现⼀个跨数据的事务的!
5、请说明EF中映射实体对象的⼏种状态?
答: Detached:该实体未由上下⽂跟踪。刚使⽤新运算符或某个 System.Data.Entity.DbSet Create ⽅法创建实体后,实体就处于此状态。
Unchanged:实体将由上下⽂跟踪并存在于数据库中,其属性值与数据库中的值相同。
Added:实体将由上下⽂跟踪,但是在数据库中还不存在。
Deleted:实体将由上下⽂跟踪并存在于数据库中,但是已被标记为在下次调⽤ SaveChanges 时从数据库中删除。
Modified:实体将由上下⽂跟踪并存在于数据库中,已修改其中的⼀些或所有属性值。
6、请说明在EF中⽣成的映射实体中有哪些验证特性?
答:Required:不能为空
StringLength 长度
7、如果实体名称和数据库表名不⼀致,该如何处理?
答:实体名称和数据库表名称不⼀致:可以通过使⽤TableAttribute 特性;
8、请说明使⽤EF如何实现级联删除?
答:级联删除需要数据库的配合,在映射实体中配置主外键关系,然后在数据库中设置操作为级联删除即可!
9、什么叫做SQL注⼊,如何防⽌?请举例说明。
答:利⽤sql关键字对⽹站进⾏攻击。过滤关键字’等
10、 浅谈EF的延迟加载。
答:即当我们需要⽤到的时候才进⾏加载(读取)。当我们希望浏览某条订单信息的时候,才显⽰其对应的订单详细记录时,我们希望使⽤延迟加载来实现,这样不仅加快的了 读取的效率,同时也避免加载不需要的数据。延迟加载通常⽤于foreach循环读取数据时。那么我们在定义Model的时候,需要在属性前⾯添加virtual关键字。
如果我们想要禁⽌使⽤延迟加载,那么最好的⽅法是在DbContext类的构造⽅法中声明。
选择题:
1.在SQL Server中,( )语句是⽤来创建表的。 (选择⼀项)
A:CREATE TABLE 表名
B:DROP TABLE 表名
C:ALTER TABLE 表名
D:DELETE TABLE 表名
2.在SQL Server中,以下⽤于更改数据库名称的存储过程是( )。(选择⼀项)
A:sp_renamedatabase
B:sp_alterdb
C:sp_renamedb
D:sp_helpdb
3.在SQL Server中,关于视图的说法不正确的是( )。 (选择⼀项)
A:视图是⼀种虚拟表,通常是作为执⾏查询的结果⽽创建的
B:使⽤CREATE VIEW语句创建视图
C:使⽤SELECT语句查看视图的查询结果
D:定义视图的查询可以基于⼀个或多个表,但不可以基于其他视图
4.在SQL Server中,下⾯( )语句⽤于提交事务。 (选择⼀项)
A:COMMIT TRANSACTION
B:BEGIN TRANSACTION
C:ROLLBACK TRANSACTION
D:SAVE TRANSACTION
5.在SQL Server中,关于存储过程的说法不正确的是( )。(选择⼀项)
A:存储过程⼀般分为系统存储过程、扩展存储过程和⽤户⾃定义存储过程
B:存储过程是在数据库管理系统中保存的、预先编译的并能实现某种功能的SQL程序
C:存储过程帮助实现了模块化编程
D:⽤户在创建⾃定义存储过程后不能再被修改
6.在SQL Server中,使⽤if…else语句时,( )可以作为条件表达式。(选择⼀项)
A:true
B:false
C:1>0
D:1==1
7.关于SQL Server中的视图,以下说法错误的是( )。 (选择⼀项)
A:视图是⼀种虚拟的表,通常是作为执⾏查询的结果⽽创建的
B:视图充当着对查询中指定的表的筛选器
C:更改视图中的数据,原始表中的数据不会随之更改
D:视图的结构和数据是建⽴在对表的查询基础上的
8.如下图所⽰,查询参加考试学员的姓名、学号、家庭地址,其中错误的T-SQL语句为( )。 (选择⼀项)
A:select stuname as 姓名,stuInfo.stuId as 学号,stuaddress as 家庭地址from stuInfo inner join stuMarks on stuInfo.stuId=stuMarks.stuId
B:select stuname as 姓名,stuMarks.stuId as 学号,stuaddress as 家庭地址from stuMarks left join stuInfo on stuMarks.stuId=stuInfo.stuId
C:select stuname as 姓名,stuid as 学号,stuaddress as 家庭地址from stuInfo where stuid in (select * from stuMarks)
D:select stuname as 姓名,stuMarks.stuId as 学号,stuaddress as 家庭地址from stuInfo right join stuMarks on stuMarks.stuId=stuInfo.stuId
9.SQL SERVER中,在绘制E-R图时,菱形和椭圆分别表⽰( )。 (选择⼀项)
A:属性、实体
B:实体、关系集
C:关系集、属性
D:实体、属性
10.在T-SQL中给变量赋值可以⽤( )。 (选择⼀项)
A:给局部变量赋值⽤set,给全局变量赋值⽤select
B:给局部变量赋值⽤set或select,不能给全局变量赋值
C:给局部变量赋值⽤select,给全局变量赋值⽤set
D:给局部变量赋值⽤set或select,给全局变量赋值⽤系统存储过程sp_setvalue
11.在SQL Server中,下列关于索引的描述错误的是( )。(选择⼀项)
A:⼀张表中主键索引最多只能有⼀个
B:⼀张表中可以有多个⾮聚集索引
C:应该在字节数⼤的列上建⽴索引
D:索引应该创建在经常⽤作查询的列
·
12.在SQL Server中,索引是在基本表的列上建⽴的⼀种数据库对象,它同基本表分开存储,使⽤它能够加快数据的( )速度。 (选择⼀项)
A:插⼊
B:修改
C:查询
D:删除
13.下⾯所⽰的T-SQL语句使⽤内连接实现多表查询,查询返回多⾏数据: SELECT SName FORM Students INNER JOIN Score on Students.SCode = Score.StudentID WHERE Score>=60 选项中可以替换上述语句实现该查询的语句是( )。 (选择⼀项)
A:SELECT SName from Students WHERE SCode = (SELECT StudentID from Score WHERE Score>=60)
B:SELECT SName from Students WHERE SCode IN (SELECT StudentID from Score WHERE Score>=60)
C:SELECT SName from Students WHERE SCode NOT IN (SELECT StudentID from Score WHERE Score<60)
D:SELECT SName from Students WHERE SCode != (SELECT StudentID from Score WHERE Score<60)
14.在SQL Server中,执⾏下⾯存储过程,语句正确的是( )。 create proc proc_score ( @stuId char(10), @score int output ) as select @score=score from score where stuId=@stuId go (选择⼀项)
A:exec proc_score ‘2011001’,output
B:declare @score int exec proc_score ‘2011001’,@score
·
C:declare @score int exec proc_score ‘2011001’,@score output
D:declare @score int exec proc_score @score output ,‘2011001’
·
15.SQL Server中,在绘制E-R图时,( )表⽰关系。 (选择⼀项)
A:椭圆
B:矩形
C:菱形
D:多边形
16.在SQL Server 数据库,数据库系统中的编程语⾔是T-SQL,T-SQL语⾔中⽤于显⽰处理的数据结果的输出语句有两种,它们的语法分别是( )。 (选择⼆项)
A:put 局部变量或字符串
B:print 局部变量或字符串
C:SELECT 局部变量 AS ⾃定义列名
D:SELECT 局部变量 FOR ⾃定义列名
17.在SQL Server中,以下关于数据库设计范式的描述中,错误的是( )。 (选择⼀项)
A:第⼀范式的⽬标是确保每列的原⼦性
B:数据库如果满⾜第三范式,则肯定满⾜第⼆范式
C:三⼤范式是⽤来帮助数据库设计者设计结构良好的数据库
D:设计数据库时,满⾜的范式级别越⾼,系统性能越好
18.在SQL Server 数据库中,对存储过程的描述错误的是( )。 (选择⼀项)
A:存储过程可以重复调⽤
B:存储过程是⾃动执⾏的
C:存储过程是SQL语句的预编译集合
D:存储过程⽐⼀般SQL语句执⾏速度更快
20.在SQL Server中有⼀个存储图书基本信息的表book,其中有书名bookName、价格price、作者author等字段,下⾯代码是查询出价格⽐图书 “Flash开发”⾼的图书信息,横线处应填写的代码是( )。(选择⼀项)
declare @avgPrice numeric ________________________________________________ select * from book where price>@avgPrice go (选择⼀项)
A:select @avgPrice =avg(price) from book
B:select @avgPrice=price from book where bookName like ‘%FLash开发%’
C:select @avgPrice=price from book where bookName=‘FLash开发’
D:select @avgPrice as price from book where bookName like ‘%FLash开发%’
·
20.在SQL Server中,有关下列语句的实际功能,描述正确的是( )。(选择两项)
WHILE EXISTS(SELECT examResult FROM Result WHERE examResult <60) BEGIN UPDATE Result SET examResult = examResult +5 IF (SELECT MAX(examResult) FROM Result)>=90 BREAK ELSE CONTINUE END (选择⼆项)
A:当有考试成绩不到60分时,循环加分
B:当成绩平均分不到60分时,循环加分
C:当最⾼分⼤于等于90时,停⽌加分
D:以上都是错的
21.在SQL Server中,关于⼦查询描述错误的是( )。 (选择⼀项)
A:相对于表连接,⼦查询更适合于作为查询的筛选条件
B:使⽤EXISTS关键字引⼊⼀个⼦查询,⼦查询产⽣查询结果集
C:使⽤IN⼦查询返回的查询结果是⼀列零值或更多值。⼦查询返回结果后,外部查询可以使⽤这些查询结果
D:⼦查询可由⼀个⽐较运算符引⼊。⽐较运算符可以是=、<>、>、<、>=、<=等
22.在SQL Server中,给定如下SQL代码,执⾏结果为( )。 INSERT INTO student (StudentID,StudentName,Age,ClassID) VALUES(227,‘马达’,23,3) DECLARE @age INT DECLARE @cid INT WHILE(1=1) BEGIN SELECT @age=Age,@cid=ClassID FROM student WHERE Student
Name=‘马达’ IF(@age<24 and @cid<>2) BEGIN UPDATE student SET ClassID=2 WHERE StudentName=‘马达’ SELECT @cid=ClassID FROM student WHERE StudentName=‘马达’ END ELSE BREAK END PRINT ‘姓名:马达 年龄:’+LTRIM(STR(@age))+’ 班级:’+LITRIM(STR(@cid)) (选择⼀项)
A:姓名:马达 年龄:23 班级:3
B:姓名:马达 年龄:23 班级:2
C:姓名:马达 年龄:3 班级:2
D:姓名:马达 年龄:2 班级:3
23.在SQL Server中,( )包含了⼀组数据库操作命令,并且所有的命令作为⼀个整体⼀起向系统提交或撤销操作请求。 (选择⼀项)
A:事务
B:视图
C:索引
D:⼦查询
24.在SQL Server中,变量@avg为⼀个整型变量,其中下列数据类型转换错误的是( )。 (选择⼀项)
A:Convert(varchar(20),@avg)
B:Cast(@avg as varchar(20))
C:Convert(nvarchar(20),@avg,100)
D:Cast(varchar(20) as @avg,100)
25.在SQL SERVER中,关于聚集索引和⾮聚集索引的区别有( )。(选择⼆项)
A:⼀个表可以有多个⾮聚集索引,但只能有⼀个聚集索引
B:聚集索引的查询速度要⽐⾮聚集索引速度快
C:在建⽴聚集索引的列上不允许有重复的值
D:⾮聚集索引的查询速度要⽐聚集索引速度快
26.在进⾏数据库设计时,设计者应当按照数据库的设计范式进⾏数据库设计。以下关于三⼤范式说法错误的是( )。 (选择⼀项)
A:第⼀范式的⽬标是确保每列的原⼦性
B:第三范式在第⼆范式的基础上,确保表中的每⾏都和主键相关
C:第⼆范式在第⼀范式的基础上,确保表中的每列都和主键相关
D:第三范式在第⼆范式的基础上,确保表中的每列都和主键直接相关,⽽不是间接相关
27.在SQL Server中,执⾏以下存储过程,语句正确的是( )。 CREATE PROC proc_student (@stuID INT,@sex BIT OUTPUT) AS SELECT @sex=sex FROM student WHERE stuID=@stuID (选择⼀项)
A:DECLARE @sex BIT EXEC proc_student OUTPUT @sex,1
多表查询sql语句面试题B:DECLARE @sex BIT EXEC proc_student @sex OUTPUT,1
C:DECLARE @sex BIT EXEC proc_student 1,OUTPUT @sex
D:DECLARE @sex BIT EXEC proc_student 1,@sex OUTPUT
28.SQL SERVER数据库中,运⾏如下代码,输出结果为( )。 CREATE PROCEDURE test @m VARCHAR(20)=null AS if @m = null BEGIN print ‘A’ return END if @m is null BEGIN print ‘B’ END select * from sysobjects where name=@m GO EXEC test (选择⼀项)
·
A:A
B:B并显⽰空的表sysobject的记录集
C:A并显⽰空的表sysobject的记录集
D:B
29.以下T-SQL代码,说法不正确的是( )。 SELECT 学号 = StudentNo, 成绩 = CASE WHEN StudentResult < 60 THEN ‘E’WHEN StudentResult BETWEEN 60 AND 69 THEN ‘D’ WHEN StudentResult BETWEEN 70 AND 79 THEN ‘C’ WHEN StudentResult BETWEEN 80 AND 89 THEN ‘B’ WHEN ELSE ‘A’ FROM Result (选择⼆项)
A:ELSE前⾯不⽤写WHEN
B:缺少END关键字
C:在每⼀个WHEN的条件表达式后⾯缺少逗号
D:缺少break关键字
30.在SQL Server中,下列关于索引的描述错误的是( )。 (选择⼀项)
A:⼀张表中主键索引最多只能有⼀个
B:⼀张表中可以有多个⾮聚集索引
C:聚集索引和主键索引必须同时存在
D:⼀般会给经常⽤作查询的列建⽴索引
31.在SQL Server中,当查询某种型号的⼿机的详细信息时,下划线处应填写( )。 SELECT * FROM mobilePhone WHERE phoneNo ___ (此处为返回多个phoneNo的SQL语句)(选择⼀项)
A:IN
B:LIKE
C:=
D:>=
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论