c#面试宝典

上传人:xzh****18 文档编号:36566997 上传时间:2018-03-30 格式:DOC 页数:12 大小:61.50KB
返回 下载 相关 举报
c#面试宝典_第1页
第1页 / 共12页
c#面试宝典_第2页
第2页 / 共12页
c#面试宝典_第3页
第3页 / 共12页
c#面试宝典_第4页
第4页 / 共12页
c#面试宝典_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《c#面试宝典》由会员分享,可在线阅读,更多相关《c#面试宝典(12页珍藏版)》请在金锄头文库上搜索。

1、net 下面调用 access 中存储过程的方法在 Sql Server 中使用存储过程是大家都比较熟悉的了,前不久自己作了一个小 东东,数据库使用的是 MS Access 数据库,也想着试试用存储过程是否可行。 毕竟,存储过程与代码的关系不是非常大,数据库和存储过程的修改有些是不 用更改编码的。下面贴出我的代码,大家会发现,其实跟调用 Sql Server 的存 储过程是完全一样的,不同的仅仅在于存储过程的名称。以删除人员信息为例: 1. 这里是数据访问层的一段代码,直接调用存储过程。public class Person /定义存储过程,注意,这里的存储过程用 括起来了。 private

2、const string ASP_PERSON_INSERT = “asp_Person_Insert“; private const string ASP_PERSON_UPDATE = “asp_Person_Update“; private const string ASP_PERSON_DELETE = “asp_Person_Delete“; . private const string PARM_PERSON_PERSONID=”PersonID”; . private OleDbParameter GetDeleteParam(int PersonID) OleDbParamet

3、er param = new OleDbParameter new OleDbParameter(PARM_PERSON_PERSONID,OleDbType.Integer) ; param0.Value=PersonID; return param; / / 删除人员信息 / / 人员 ID / 成功返回 True;失败返回 False public bool Delete(int personID) /ASP_PERSON_DELETE 存储过程的名称。 OleDbParameter param=this.GetDeleteParam(personID); try / 调用方式没有变化。

4、 int i=Utility.Tools.CreateOleDbCommandExecuteNonQuery(ASP_PERSON_DELETE,p aram); if (i0) return true; catch return false; 2.再来看看 Access 数据库里面跟 Sql Server 有什么区别:Access 数据库中的存储过程是以“查询”的方式存放的,打开你的 Access 数 据库,选中“查询”,选中“新建”,先建立一个简单的查询。选择表和需要 的字段以及需要的参数。这时,再选中工具栏中的 SQL 视图,您可以看到如下 的语句:PARAMETERS PersonID

5、 Short; DELETE * FROM PersonInfo WHERE PersonInfo.PersonID=PersonID;如果参数多,请参照:PARAMETERS ID Short, ParentID Short, OrganName Text ( 255 ), Numbe Text ( 255 ), OtherName Text ( 255 ), CodeID Text ( 255 ), OrganSpec Text ( 255 ), OrganProperty Text ( 255 ), OutLayType Text ( 255 ), ManageDepart Text (

6、 255 ), SetUpTime DateTime, PassDepart Text ( 255 ), OrganNUM Short, PersonNUM Short, PassNumber Text ( 255 ), Address Text ( 255 ), JPerson Text ( 255 ), Tel Text ( 255 ), YearCheck Text ( 255 );最后,保存就可以运行你的代码试试了。另外,Access 里面没有 Sql Server 的查询器,所以你要在 Access 中测试你的存储过程会比较麻烦些:右键选中你 的存储过程,选择“打开”即可,但是参数不

7、要输入错误。Access 中写存储过 程是闭架麻烦的,毕竟不象 Sql Server 那样对存储过程的支持好,所以要特别 细心而且强烈建议大家经常保存。.net 数据库连接池相关的面试题如何实现连接池?如何实现连接池?确保你每一次的连接使用相同的连接字符串(和连接池相同);只有连接字符 串相同时连接池才会工作。如果连接字符串不相同,应用程序就不会使用连接 池而是创建一个新的连接。优点优点使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主 要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个 过程通常是一个很耗时的过程。而采用数据库连接池后,数据库连接请求可以

8、直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样 就节省了时间。缺点缺点数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味 着资源的浪费)。技巧和提示1 当你需要数据库连接时才去创建连接池,而不是提前建立。一旦你使用完 连接立即关闭它,不要等到垃圾收集器来处理它。2 在关闭数据库连接前确保关闭了所有用户定义的事务。3 不要关闭数据库中所有的连接,至少保证连接池中有一个连接可用。如果 内存和其他资源是你必须首先考虑的问题,可以关闭所有的连接,然后在下一 个请求到来时创建连接池。连接池连接池 FAQFAQ1 何时创建连接池?何时创建连接池?当第一个连接请求到来

9、时创建连接池;连接池的建立由数据库连接的连接字符 创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请 求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连 接;如果不相同,就新建一个连接池。2 何时关闭连接池?何时关闭连接池?当连接池中的所有连接都已经关闭时关闭连接池。3 当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请 求将放置到连接队列中。当有连接释放给连接池时,连接池将新释放的连接分 配给在队列中排队的连接请求。

10、你可以调用 close 和 dispose 将连接归还给连 接池。4 我应该如何允许连接池?我应该如何允许连接池?对于.NET 应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事 情做任何的事情)当然,如果你可以在 SQLConnection 对象的连接字符串中加 进 Pooling=true;确保你的应用程序允许连接池的使用。5 我应该如何禁止连接池?我应该如何禁止连接池?ADO.NET 默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的 方式:1) 使用 SQLConnection 对象时,往连接字符串加入如下内容:Pooling=False;2) 使用 OLEDBCo

11、nnection 对象时,往连接字符串加入如下内容:OLE DB Services=-4;NET 里面的 datagrid 翻页大多是先把数据读全部取到 dataset 里面,但是遇到 10W 条数据以 上,这样的翻页事件开销会很大,页面执行起来反映很慢,你有什么好方法解决? 在数据量大的时候,有两个解决办法 1.使用存储过程.并且,并非因为存储过程比较快的原因.由于在数据库内部的存储过程,能够 实现一些特殊的功能,比如说,可以直接根据当前的排序结果,仅仅取需要的几条数据,如此,无 论数据是多少,它仅仅取需要的几条. 2.在实际的操作中,取出的数据,并非你有 10 万条,它就会把 10 万条全

12、部取出来,而是受限于 服务器的缓存,其实一次一般仅取 1000 条左右的记录,无论你数据多少,它仅会一次取这么多 出来.所以,配合分页控件,再配合.NET 提供的加载 N 条数据的方法,数据量大的情况下,不见 得就会慢. 据我测试,真正慢的,是在取数据总共多少条这个步骤上.此操作在数据少时,没有影响,但在百 万条记录以上时,求取数据总数,耗时就会大量增加.所以,大数据量条件下,即不应再显示”共 几条/当前第几条”这样的信息. 如何提高.NET 的性能 ?使用异步方式调用 Web 服务和远程对象只要有可能就要避免在请求的处理过程中对 Web 服务和远程对象的同步调用, 因为它占用的是的 ASP.

13、NET 线程池中的工作线程,这将直接影响 Web 服务器响 应其它请求的能力。2 使用适当的 Caching 策略来提高性能3 判断字符串,不要用”“比较。/避免 if(strABC!=null 应该捕获更具体得异常,比如 IOExeception,OutOfMemoryException 等catch(Exceptioncatch(Exception e)throwe)throw e;e;和和 catch(Exceptioncatch(Exception e)throw;e)throw;的区别的区别将发生的异常对象抛出,另一个只是抛出异常,并没有抛出原异常对象)errorerror 和和 e

14、xceptionexception 区别:区别:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢 出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常, 从不会发生的情况.NET 考题1、 传入某个属性的 set 方法的隐含参数的名称是什么?Value2、 如何在 C中实现继承?: 类名(冒号加类名)3、 C#支持多重继承么?不支持4、 被 protected 修饰的属性/方法在何处可以访问?类内部及继承类中5、 私有成员会被继承么?会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被 继承了

15、。6、 请描述一下访问修饰符 protected internal.在同一个 Assembly 中,他的访问级别和 public 一样,而跨 Assembly 访问时, 他的访问级别同 protected 一样。即 protected 的范围 + internal 的范围。7、 C#提供一个默认的无参数构造函数,当我实现了另一个有一个参数的构造 函数时候,还想保留这个无参数的构造函数,这样我应该写几个构造函数?2 个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以 需要手动实现那个无参数构造函数8、 C#中所有对象共同的基类是什么?System.Object9、 重载和重写有

16、什么区别?重载是指同名方法,不同的参数,不同的实现而重写则是覆盖父类中的方法实现10、 在方法定义中,virtual 有什么含意?Virtual 标记方法为虚方法,可以在子类中用 new 来覆盖重写,多用于实现多 态11、 可以重写私有的虚方法么?不可以12、 能够阻止某一个类被其他类继承么?可以,用封装类13、 能够实现允许某个类被继承,但不允许其中的某个方法被重写么?可以,标记这个类为 public,并标记这个方法为 sealed14、 如何区别重载方法?不同的参数类型,不同的参数个数,不同的参数顺序15、 Const 和 readonly 有什么区别?const 可以用于局部常量,而 readonly,实际是类的 initonly 字段,显然不能 是局部的。16、

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号