.Net程序员面试题分享(EF/Sql篇)

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 StudentName=‘马达’ 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
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:>=

32.关于SQL Server中的事务,以下说法错误的是( )。(选择一项)
A:事务中的所有元素必须作为一个整体提交或回滚
B:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
C:SQL Server中不能使用事务日志保存受到故障影响的事务
D:当事务成功完成时,数据必须再次回到已知的一致状态

33.在SQL Server中,下面的( )语句是正确的。(选择一项)
A:CREATE VIEW view1 AS SELECT * INTO #S1 FROM DEPT GO

B:CREATE VIEW view1 AS SELECT * FROM DEPT ORDER BY DEPTID GO

C:CREATE VIEW view1 AS SELECT TOP 5 * FROM DEPT ORDER BY DEPTID GO

D:CREATE VIEW view1 AS DECLARE did int SET @did=10 SELECT * FROM DEPT WHERE DEPTID =@did GO

34.在SQL Server中,以下关于视图描述错误的是( )。(选择两项)
A:定义视图的查询可以基于一个或多个表
B:定义视图的查询不可以基于其它视图
C:视图通常在查询数据时使用
D:视图一旦被删除,视图中的数据也同时被删除。

35.在SQL Server中,关于变量描述,不正确的是( )。(选择一项)
A:变量可分为全局变量和局部变量两大类
B:全局变量是由系统提供且预先声明,通过在名称前加两个“@”符号区别于局部变量
C:不能使用SELECT语句给变量赋值
D:可使用DECLARE语句声明局部变量

36.在SQL Server中,下面选项可以正确实现对变量赋值的是( )。(选择两项)
A:declare @name char(10) set @name=‘小强’

B:declare @age int(4)
select @age=18

C:declare @sex bit set @sex=0

D:declare @money money(4) set @money=4

37.在SQL SERVER中,关于用户定义的存储过程说法正确的是( )。(选择一项)
A:使用create procedure语句来创建存储过程
B:存储过程必须带参数
C:存储过程如果有输入参数,则输入参数不能设置默认值
D:存储过程可以没有输出参数,但是必须有输入参数

38.在SQL SERVER中,图书信息表Book中有图书编号id、书名BookName、价格BookPrice、出版日期Tdate等字段,关于下面的代码说法正确的是( )。(选择一项)
declare @avgPrice float select @avgPrice=AVG(BookPrice) from Book if(@avgPrice>80) begin select top 10 * from Book order by BookPrice desc end else begin select top 10 * from Book order by BookPrice asc end
A:如果图书的平均价格高于80,则查出价格最高的10本图书信息
B:如果图书的平均价格高于80,则查出价格最低的10本图书信息
C:如果图书的最高价格高于80,则查出价格最高的10本图书信息
D:如果图书的最高价格高于80,则查出价格最低的10本图书信息

39.在SQL Server中,运行以下T-SQL语句,输出的结果是( )。(选择一项)
CREATE PROC usp_selectStu @stuNo varchar(8)=NULL AS IF @stuNo IS NULL Begin Print ‘请输入学号’ RETURN End SELECT * FROM stuInfo WHERE stuNo=@stuNo GO EXEC usp_selectStu

A:编译错误
B:调用存储过程usp_ selectStu出错
C:显示空的学员信息记录集
D:显示“请输入学号”

40.在SQL Server中,以下关于常用的系统存储过程的说法正确的是( )。(选择一项)
A:sp_databases用于列出数据库服务器中的所有数据库信息
B:sp_helpconstraint用于查看某个表的索引
C:sp_procedures用于显示存储过程的列表
D:sp_tables用于查看系统中存在的表的个数

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值