net面試題目匯總_第1頁(yè)
net面試題目匯總_第2頁(yè)
net面試題目匯總_第3頁(yè)
net面試題目匯總_第4頁(yè)
net面試題目匯總_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.net面試題目匯總Abstructclass與Interface的區(qū)別相同點(diǎn):1)都不能被初始化;2)都支持抽象方法;不同點(diǎn):1)abstractclass的成員函數(shù)允許有函數(shù)體,interface不能2)abstractclass允許有成員變量,interface不能(interface只能含有事件,委托,函數(shù),屬性,索引器);3)abstractclass的方法允許含有可見(jiàn)性修飾符,interface不能(默認(rèn)為public)4)abstractclass不能被多重繼承,interface可以被多重繼承(實(shí)現(xiàn))5)abstractclass可以擁有構(gòu)造函數(shù)/靜態(tài)構(gòu)造函數(shù),interface不可以class與Struct的區(qū)別相同點(diǎn):1)它們都是創(chuàng)建對(duì)象的模板,用以抽象某類具有統(tǒng)統(tǒng)特征的對(duì)象;他們都包含數(shù)據(jù)和方法;2)它們?cè)谑褂蒙蠜](méi)有太大的區(qū)別,除了關(guān)鍵字class和struct不同;不同點(diǎn):1)Struct是值類型,它在內(nèi)存中的存儲(chǔ)方式是存儲(chǔ)于堆(heap)上2)Class是引用類型,它在內(nèi)存中的存儲(chǔ)方式是存儲(chǔ)于棧(stack)上Ref,Out,Params的區(qū)別params關(guān)鍵字可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。在方法聲明中的params關(guān)鍵字之后不允許任何其他參數(shù),并且在方法聲明中只允許一個(gè)params關(guān)鍵字。Out這是一個(gè)引用傳遞L。原則一:當(dāng)一個(gè)方法(函數(shù))在使用out作為參數(shù)時(shí),在方法中(函數(shù))對(duì)out參數(shù)所做的任何更改都將反映在該變量中。原則二:當(dāng)希望方法返回多個(gè)值時(shí),聲明out方法非常有用。使用out參數(shù)的方法仍然可以返回一個(gè)值。一個(gè)方法可以有一個(gè)以上的out參數(shù)。原則三:若要使用out參數(shù),必須將參數(shù)作為out參數(shù)顯式傳遞到方法。out參數(shù)的值不會(huì)傳遞到out參數(shù)。原則四:不必初始化作為out參數(shù)傳遞的變量,因?yàn)閛ut參數(shù)在進(jìn)入方法(函數(shù))時(shí)后清空自己,使自己變成一個(gè)干凈的參數(shù),也因?yàn)檫@個(gè)原因必須在方法返回之前為out參數(shù)賦值(只有地址沒(méi)有值的參數(shù)是不能被.net接受的)。原則五:屬性不是變量,不能作為out參數(shù)傳遞。原則六:如果兩個(gè)方法的聲明僅在out的使用方面不同,則會(huì)發(fā)生重載。不過(guò),無(wú)法定義僅在ref和out方面不同的重載。ref僅僅是一個(gè)地址!?。≡瓌t一:當(dāng)一個(gè)方法(函數(shù))在使用ref作為參數(shù)時(shí),在方法中(函數(shù))對(duì)ref參數(shù)所做的任何更改都將反映在該變量中。原則二:調(diào)用方法時(shí),在方法中對(duì)參數(shù)所做的任何更改都將反映在該變量中。原則三:若要使用ref參數(shù),必須將參數(shù)作為ref參數(shù)顯式傳遞到方法。ref參數(shù)的值可以被傳遞到ref參數(shù)。原則四:ref參數(shù)傳遞的變量必須初始化,因?yàn)閞ef參數(shù)在進(jìn)入方法(函數(shù))時(shí)后還是它自己,它這個(gè)地址指向的還是原來(lái)的值,也因?yàn)檫@個(gè)原因ref參數(shù)也可以在使用它的方法內(nèi)部不操作。原則六:如果兩種方法的聲明僅在它們對(duì)ref的使用方面不同,則將出現(xiàn)重載。但是,無(wú)法定義僅在ref和out方面不同的重載。經(jīng)常會(huì)被問(wèn)到的二個(gè)算法:冒泡排序和二分法。以下是兩個(gè)比較經(jīng)典的實(shí)現(xiàn)。冒泡排序算法:publicvoidBubbleSort(int[]arr){for(inti=1;i<arr.Length;i++)for(intj=0;j<arr.Length-i;j++){if(arr[j]>arr[j+1]){inttmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}二分法查找:publicintHalfSearch(intkey,int[]arr){intleft=0;intright=arr.Length-1;while(left<=right){intmiddle=(left+right)/2;if(key==arr[middle])returnmiddle;elseif(key>arr[middle]){left=middle+1;}else{right=middle-1;return-1;面試時(shí)有相當(dāng)大的可能會(huì)被問(wèn)到面向?qū)ο竦奶攸c(diǎn):繼承,封裝,多態(tài)。封裝:每個(gè)對(duì)象都包含它能進(jìn)行操作所需要的所有信息,這個(gè)特性稱為封裝,因此對(duì)象不必依賴其他對(duì)象來(lái)完成自己的操作。繼承:對(duì)象的繼承代表了一種“is-a”的關(guān)系,如果兩個(gè)對(duì)象A和B,可以描述為“B是A”,則表明B可以繼承A。多態(tài):表示不同的對(duì)象可以執(zhí)行相同的動(dòng)作,但要通過(guò)它們自己的實(shí)現(xiàn)代碼來(lái)執(zhí)行。集合ArrayList是命名空間System.Collections下的一部分,它是使用大小可以按需要?jiǎng)討B(tài)增加的數(shù)組實(shí)現(xiàn)IList接口。泛型泛型是具有占位符(類型參數(shù))的類、結(jié)構(gòu)、接口和方法,這些占位符是類、結(jié)構(gòu)、接口和方法所存儲(chǔ)或使用的一個(gè)或多個(gè)類型的占位符。泛型集合類可以將類型參數(shù)用作它所存儲(chǔ)的對(duì)象的類型占位符;類型參數(shù)作為其字段的類型和其方法的參數(shù)類型出現(xiàn)。IList<A>arrA=newList<A>();通常情況下,都建議使用泛型集合,因?yàn)檫@樣可以獲得得類型安全的直接優(yōu)點(diǎn)而不需要從基集合類型派生并實(shí)現(xiàn)類型的特定成員。此外,如果集合元素為值類型,泛型集合的性能通常優(yōu)于對(duì)應(yīng)的非泛型集合類型(并優(yōu)于從非泛基集合型類型派生的類型),因?yàn)槭褂梅盒蜁r(shí)不必對(duì)元素進(jìn)行裝箱。委托和事件委托是對(duì)函數(shù)的封裝,可以當(dāng)作給方法的特征指定一個(gè)名稱。而事件則是委托的一種特殊形式,當(dāng)發(fā)生有意義的事情時(shí),事件對(duì)象處理通知過(guò)程。委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。事件是在發(fā)生其他類或?qū)ο箨P(guān)注的事情時(shí),類或?qū)ο罂赏ㄟ^(guò)事件通知它們。publicdelegatevoidCatShoutEventHandler();publiceventCatShoutEventHandlerCatShout;EventArges是包含事件數(shù)據(jù)的類的基類。一、Remoting和WebService面試的時(shí)候有時(shí)候會(huì)被問(wèn)到Remoting和Webservice技術(shù)的區(qū)別:1.Remoting是MarshByReference的,可以傳變量的引用,直接對(duì)服務(wù)器對(duì)象操作。速度快,適合intranet(企業(yè)內(nèi)部互聯(lián)網(wǎng))。Webservice是MarshByValue的,必須傳對(duì)象的值。速度慢,可以過(guò)FIREWALL配置比較簡(jiǎn)單,適合internet(因特網(wǎng))。一般來(lái)說(shuō),Remoting是和平臺(tái)相關(guān)的,需要客戶和服務(wù)器都是.NET,但可配置特性比較好,可以自定義協(xié)議,可以使用Http或Tcp協(xié)議。Webservice可以做到跨平臺(tái)通信,但必須采用SOAP協(xié)議。soap消息有rpc和文檔兩種樣式。文檔樣式的body元素中包含一個(gè)或多個(gè)元素,可以是任何內(nèi)容,只要接受者理解就行了。rpc樣式的的body元素中包含調(diào)用的方法或遠(yuǎn)程過(guò)程的名稱,以及代表方法參數(shù)的元素。.net對(duì)這兩種樣式的實(shí)現(xiàn)就是Webservice和RemotingRemoting不僅能傳輸XML格式的SOAP包(HTTP),還能傳輸二進(jìn)制的數(shù)據(jù)流(TCP)。Webservice只能傳輸SOAP包。Remoting可以用于有狀態(tài)的情況,Webservice是基于Http無(wú)狀態(tài)的。在Windows操作系統(tǒng)中,Webservice是基于.netframework和IIS框架之上的,而Remoting則是不依賴于IIS的,使用者可以開(kāi)發(fā)和部署自己的宿主服務(wù)器。這里還有兩個(gè)重點(diǎn):1.Remoting的SingleTon和SingleCall模式SingleTon模式:此為有狀態(tài)模式。如果設(shè)置為SingleTon激活方式,則Remoting將為所有客戶端建立同一個(gè)對(duì)象實(shí)例。當(dāng)對(duì)象處于活動(dòng)狀態(tài)時(shí),SingleTon實(shí)例會(huì)處理所有后來(lái)的客戶端訪問(wèn)請(qǐng)求,而不管它們是同一個(gè)客戶端,還是其他客戶端。SingleTon實(shí)例將在方法調(diào)用中一直維持其狀態(tài)。舉例來(lái)說(shuō),如果一個(gè)遠(yuǎn)程對(duì)象有一個(gè)累加方法(i=0;++i),被多個(gè)客戶端(例如兩個(gè))調(diào)用。如果設(shè)置為SingleTon方式,則第一個(gè)客戶獲得值為1,第二個(gè)客戶獲得值為2,因?yàn)樗麄儷@得的對(duì)象實(shí)例是相同的。如果熟悉Asp.Net的狀態(tài)管理,我們可以認(rèn)為它是一種Application狀態(tài)。SingleCall模式:SingleCall是一種無(wú)狀態(tài)模式。一旦設(shè)置為SingleCall模式,則當(dāng)客戶端調(diào)用遠(yuǎn)程對(duì)象的方法時(shí),Remoting會(huì)為每一個(gè)客戶端建立一個(gè)遠(yuǎn)程對(duì)象實(shí)例,至于對(duì)象實(shí)例的銷毀則是由GC自動(dòng)管理的。同上一個(gè)例子而言,則訪問(wèn)遠(yuǎn)程對(duì)象的兩個(gè)客戶獲得的都是1。我們?nèi)匀豢梢越梃bAsp.Net的狀態(tài)管理,認(rèn)為它是一種Session狀態(tài)。WebService和SOAP支持處理的數(shù)據(jù)類型不知道大家有沒(méi)有遇到這種情況:在調(diào)用WebService并給一個(gè)方法傳遞了一個(gè)DataRow參數(shù)時(shí),運(yùn)行時(shí)會(huì)拋出異常:”沒(méi)法將參數(shù)序列化!”,如果把DataRow加入到DataSet中,并將DataSet作為參數(shù)傳遞再運(yùn)行就OK了。這是因?yàn)椋篨MLWebService只能對(duì)數(shù)據(jù)集DataSet對(duì)象類型進(jìn)行XML序列化,不能對(duì)DataRow對(duì)象類型進(jìn)行XML序列化造成的錯(cuò)誤.所以了解一下XMLWebService支持序列化的基本數(shù)據(jù)類型是比較重要的.它支持的數(shù)據(jù)類型如下:1).基本數(shù)據(jù)類型.標(biāo)準(zhǔn)類型,如:intfloatboolDateTimestring等基本數(shù)據(jù)類型2).枚舉.支持枚舉Enum定義的類型3).自定義對(duì)象.可以傳遞任意基于自定義類或結(jié)構(gòu)創(chuàng)建的對(duì)象。但要注意一點(diǎn):它只能傳輸數(shù)據(jù)成員(變量和屬性).如果定義了方法,則方法不能進(jìn)行序列化傳輸,序列化后只剩下數(shù)據(jù)成員..DataSet對(duì)象支持DataSet,切記:不支持DataTable和DataRow,DataSet已經(jīng)是Webservice能夠支持的最小的可序列化對(duì)象..XmlNode對(duì)象基于XmlNode的對(duì)象可以表示XML文檔的一部分..數(shù)組和集合可以使用任何被支持的類型的數(shù)組和簡(jiǎn)單集合,包括:DataSet對(duì)象/XmlNode對(duì)象和自定義對(duì)象.順便說(shuō)明一下序列化的概念:序列化是指將對(duì)象實(shí)例的狀態(tài)存儲(chǔ)到存儲(chǔ)媒體的過(guò)程。在此過(guò)程中,先將對(duì)象的公共字段和私有字段以及類的名稱轉(zhuǎn)換為字節(jié)流,然后再把字節(jié)流寫(xiě)入數(shù)據(jù)流。在隨后對(duì)對(duì)象進(jìn)行反序列化時(shí),將創(chuàng)建出與原對(duì)象完全相同的副本。要使一個(gè)類可序列化,最簡(jiǎn)單的方法是使用Serializable屬性對(duì)它進(jìn)行標(biāo)記。給個(gè)例子:[Serializable]classMyUser{publicstringsUserName;publicintiAage;publicoverridestringToString(){returnstring.Format("姓名:{0},年齡:{1}”,sUserName,iAage);}}///////1、CTS、CLS和CLR分別是什么意思?什么是裝箱和拆箱?答:CTS是公共類型系統(tǒng),CLS是公共語(yǔ)言規(guī)范,CLR公共語(yǔ)言運(yùn)行庫(kù)。裝箱和拆箱:是把值類型轉(zhuǎn)換為引用類型的過(guò)程,是隱式的,相反的過(guò)程就是拆箱,是顯式的。2、C#、JavaC++特點(diǎn),有什么相同地方,不同的。C#從C++和Java吸取了什么優(yōu)點(diǎn)?答:C#大部分的特性來(lái)源于Java,例如編譯機(jī)制,運(yùn)行機(jī)制,中間語(yǔ)言,虛擬機(jī)等等。但是C#拓展了Java,支持了更多優(yōu)良的語(yǔ)法,比如事件編程機(jī)制。并且dotnetframework的支持多種編程語(yǔ)言(java,C#,C++,VB.NET等),不同于java虛擬機(jī)單一的支持java語(yǔ)言。C#繼承于C++的特性是指針,通過(guò)unsafe關(guān)鍵字,C#可以使用底層的指針直接操作內(nèi)存,但是一個(gè)有爭(zhēng)議的特性。3、C#可否對(duì)內(nèi)存直接操作。答:可以,通過(guò)unsafe語(yǔ)法,C#可以使用類似于C++的指針,直接操作內(nèi)存。但是最好不要使用!4、維護(hù)數(shù)據(jù)庫(kù)的完整性,你喜歡用觸發(fā)器還是自寫(xiě)業(yè)務(wù)邏輯?為什么?答:盡可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空字段)實(shí)現(xiàn),這種方式的效率最好;其次用觸發(fā)器,這種方式可以保證無(wú)論何種業(yè)務(wù)系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)都能維持?jǐn)?shù)據(jù)庫(kù)的完整性、一致性;最后再考慮用自寫(xiě)業(yè)務(wù)邏輯實(shí)現(xiàn),但這種方式效率最低、編程最復(fù)雜,當(dāng)為下下之策5、C#中的委托是什么?事件是不是委托?答:1,委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。委托方法的使用可以像其他任何方法一樣,具有參數(shù)和返回值。例子:publicdelegateintPerformCalculation(intx,inty);2,事件不是委托,但是事件的底層實(shí)確實(shí)是基于委托的。所以某種意義上可以把事件理解為加上的event關(guān)鍵字的委托變量。6、簡(jiǎn)述以下你對(duì)分布式程序設(shè)計(jì)的理解,你對(duì)COM、DCOM、remoting、webservice了解嗎?簡(jiǎn)單描述其特點(diǎn)作用7、自定義控件和一般控件的異同。如果用過(guò)兩者之一你選什么?為什么?答:自定控件可以加到VS工具欄里用,一般控件做不到,自定義控件可以繼承其它控件,也可以被繼承.8、大概描述一下ASP.NET服務(wù)器控件的生命周期?答:初始化---加載視圖狀態(tài)---處理回發(fā)數(shù)據(jù)---加載---發(fā)送回發(fā)更改通知---處理同發(fā)事件---預(yù)呈現(xiàn)---保存狀態(tài)---呈現(xiàn)---處置---卸載9、colloction和collections區(qū)別?答:Collection是集合類的上級(jí)接口,Collections是針對(duì)集合類的一個(gè)幫助類,它提供一系列靜態(tài)方法來(lái)實(shí)現(xiàn)對(duì)各種集合的搜索,排序,線程安全化操作。10、ASP、ASP.NET實(shí)現(xiàn)報(bào)表顯示打印的方案?答:應(yīng)用XML技術(shù)實(shí)現(xiàn)報(bào)表打印的方案。11、math.roand(11.5)等于多少?,mathround(-11.5)等于多少?答:12、-1112、overload和override區(qū)別overloaded的方法是否可以改變返回值、類型?答:Override是重寫(xiě)的意思,它表示重寫(xiě)基類的方法,而且方法的名稱,返回類型,參數(shù)類型,參數(shù)個(gè)數(shù)要與基類相同。Overload是重載是意思,它也表示重寫(xiě)基類的方法,但是只要方法名相同,別的可以不同。是可以改變返回值、類型13、set里的元素是不能重復(fù)的,那么用什么方法區(qū)分復(fù)與否呢?用==還是equas(),他們有什么區(qū)別?答:Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。equals()和==方法決定引用值是否指向同一對(duì)象equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值14、List、Set、Map是否繼承自colloction接口?答:List,Set是Map不是15、兩個(gè)對(duì)象值相同((X?EAUSCY)==TURE)fi卻可有不同的hashcode這句話對(duì)嗎?答:不對(duì),有相同的hashcode。16.SonSurtion能不能作用在byte.string.long上?不能存儲(chǔ)過(guò)程和函數(shù)區(qū)別?答:函數(shù)有且只有一個(gè)返回值,就像普通的函數(shù)一樣,可以直接在表達(dá)式中嵌入調(diào)用存儲(chǔ)過(guò)程可以沒(méi)有返回值,也可以有任意個(gè)輸出參數(shù),必須單獨(dú)調(diào)用事務(wù)是什么?答:事務(wù)是指一個(gè)工作單元,它包含了一組數(shù)據(jù)操作命令,并且所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤消請(qǐng)求操作,這組命令要么都執(zhí)行,要么都不執(zhí)行。游標(biāo)作用,如何知道游標(biāo)已到了最后?答:游標(biāo)用于定位結(jié)果集的行,通過(guò)判斷全局變量@@fetch_status砍斷是否到了最后,通常變量不等于0表示出錯(cuò)或到了最后觸發(fā)器分事前觸發(fā)的事后觸發(fā)區(qū)別是什么?語(yǔ)句級(jí)觸發(fā)和行級(jí)觸發(fā)區(qū)別?事前觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之前,而事后觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之后。通常事前觸發(fā)器可以獲取事件之前和新的字段值。語(yǔ)句級(jí)觸發(fā)器可以在語(yǔ)句執(zhí)行前或后執(zhí)行,而行級(jí)觸發(fā)在觸發(fā)器所影響的每一行觸發(fā)一次。分析下SQLServer,Excharge.Server.Share,Porint,PortfalServerBiaTalkserve各自的功能及其作用?ApplicafionBlock說(shuō)明其作用?ApplicationBlock將工作流代碼從用戶界面層抽象出來(lái)放到用戶界面處理層。UIPApplicationBlock將UIP狀態(tài)從用戶界面中抽象出來(lái)并且存儲(chǔ)在一個(gè)通用狀態(tài)對(duì)象中,這個(gè)對(duì)象通過(guò)block類來(lái)訪問(wèn)ASP中怎么連接數(shù)據(jù)庫(kù)?用javascript連接什么是AppheafionPool?應(yīng)用程序池是將一個(gè)或多個(gè)應(yīng)用程序鏈接到一個(gè)或多個(gè)工作進(jìn)程集合的配置。因?yàn)閼?yīng)用程序池中的應(yīng)用程序與其他應(yīng)用程序被工作進(jìn)程邊界分隔,所以某個(gè)應(yīng)用程序池中的應(yīng)用程序不會(huì)受到其他應(yīng)用程序池中應(yīng)用程序所產(chǎn)生的問(wèn)題的影響。Remoting在客戶端服務(wù)怎么實(shí)現(xiàn)?COM、DCOM、REMOTING、WEBSERVICE了解多少?com是一個(gè)很好的組鍵說(shuō)說(shuō)你的項(xiàng)目經(jīng)驗(yàn)及心得?你在三年內(nèi)的職業(yè)規(guī)劃是什么?swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?答:switch(exprl)中,exprl是一個(gè)整數(shù)表達(dá)式。因此傳遞給switch和case語(yǔ)句的參數(shù)應(yīng)該是int、short、char或者byte。long,string都不能作用于swtich。ADO.NET的對(duì)象分別有什么?答:1,Connection//標(biāo)識(shí)一個(gè)數(shù)據(jù)庫(kù)的連接2,Command//可以通過(guò)該對(duì)象向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送Sql命令,并且得到返回結(jié)果。3,Transaction//表示一個(gè)數(shù)據(jù)庫(kù)的事務(wù),通過(guò)SqlConnection的BeginTransaction方法啟動(dòng)事務(wù),它包含Commit提交和Rollback回滾兩個(gè)操作。4,DataReader//返回游標(biāo)讀取類5,DataAdapter//數(shù)據(jù)配置器,配合DataSet使用,提供離線的數(shù)據(jù)集合訪問(wèn)支持。6,SqlCommandBuilder//SqlDataAdapter類的輔助類,可以通過(guò)查詢命令生成增,刪,改的命令。什么時(shí)候用到虛方法?虛方法和接口有什么區(qū)別?什么是“虛方法"?當(dāng)實(shí)例方法聲明包含virtual修飾符時(shí),稱該方法為虛擬方法。不存在virtual修飾符時(shí),稱該方法為非虛擬方法。非虛擬方法的實(shí)現(xiàn)是不變的:無(wú)論是在聲明它的類的實(shí)例上調(diào)用該方法還是在派生類的實(shí)例上調(diào)用,實(shí)現(xiàn)都是相同的。與此相反,虛擬方法的實(shí)現(xiàn)可以由派生類取代。取代所繼承的虛擬方法之實(shí)現(xiàn)的過(guò)程稱為重寫(xiě)方法在虛擬方法調(diào)用中,為其進(jìn)行調(diào)用的實(shí)例的運(yùn)行時(shí)類型確定要調(diào)用的實(shí)際方法實(shí)現(xiàn)。在非虛擬方法調(diào)用中,實(shí)例的編譯時(shí)類型是決定性因素。準(zhǔn)確地說(shuō),當(dāng)在具有編譯時(shí)類型C和運(yùn)行時(shí)類型R的實(shí)例(其中R為C或者從C派生的類)上用參數(shù)列表A調(diào)用名為N的方法時(shí),調(diào)用按下面這樣處理:首先,將重載決策應(yīng)用于C、N和A,以從在C中聲明和由C繼承的方法集中選擇一個(gè)特定方法M。然后,如果M為非虛擬方法,則調(diào)用M。否則,M為虛擬方法,調(diào)用就R而言M的派生程度最大的實(shí)現(xiàn)。32.請(qǐng)編程遍歷頁(yè)面上所有TextBox控件并給它賦值為string.Empty?答:foreach(System.Windows.Forms.Controlcontrolinthis.Controls){if(controlisSystem.Windows.Forms.TextBox){System.Windows.Forms.TextBoxtb=(System.Windows.Forms.TextBox)control;tb.Text=String.Empty;}}SQL基本語(yǔ)句SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于這是大多數(shù)SQL用戶經(jīng)常用到的,我們有必要在此對(duì)它們進(jìn)行一一說(shuō)明。在圖1中我們給出了一個(gè)名為EMPLOYEES的表。其中的每一行對(duì)應(yīng)一個(gè)特定的雇員記錄。請(qǐng)熟悉這張表,我們?cè)诤竺娴睦又袑⒁玫剿?。INSERT語(yǔ)句用戶可以用INSERT語(yǔ)句將一行記錄插入到指定的一個(gè)表中。例如,要將雇員JohnSmith的記錄插入到本例的表中,可以使用如下語(yǔ)句:INSERTINTOEMPLOYEESVALUES('Smith','John','1980-06-10','LosAngles',16,45000);通過(guò)這樣的INSERT語(yǔ)句,系統(tǒng)將試著將這些值填入到相應(yīng)的列中。這些列按照我們創(chuàng)建表時(shí)定義的順序排列。在本例中,第一個(gè)值“Smith”將填到第一個(gè)列LAST_NAME中;第二個(gè)值“John”將填到第二列FIRST_NAME中……以此類推。我們說(shuō)過(guò)系統(tǒng)會(huì)“試著”將值填入,除了執(zhí)行規(guī)則之外它還要進(jìn)行類型檢查。如果類型不符(如將一個(gè)字符串填入到類型為數(shù)字的列中),系統(tǒng)將拒絕這一次操作并返回一個(gè)錯(cuò)誤信息。如果SQL拒絕了你所填入的一列值,語(yǔ)句中其他各列的值也不會(huì)填入。這是因?yàn)镾QL提供對(duì)事務(wù)的支持。一次事務(wù)將數(shù)據(jù)庫(kù)從一種一致性轉(zhuǎn)移到另一種一致性。如果事務(wù)的某一部分失敗,則整個(gè)事務(wù)都會(huì)失敗,系統(tǒng)將會(huì)被恢復(fù)(或稱之為回退)到此事務(wù)之前的狀態(tài)?;氐皆瓉?lái)的INSERT的例子,請(qǐng)注意所有的整形十進(jìn)制數(shù)都不需要用單引號(hào)引起來(lái),而字符串和日期類型的值都要用單引號(hào)來(lái)區(qū)別。為了增加可讀性而在數(shù)字間插入逗號(hào)將會(huì)引起錯(cuò)誤。記住,在SQL中逗號(hào)是元素的分隔符。同樣要注意輸入文字值時(shí)要使用單引號(hào)。雙引號(hào)用來(lái)封裝限界標(biāo)識(shí)符。對(duì)于日期類型,我們必須使用SQL標(biāo)準(zhǔn)日期格式(yyyy-mm-dd),但是在系統(tǒng)中可以進(jìn)行定義,以接受其他的格式。當(dāng)然,2000年臨近,請(qǐng)你最好還是使用四位來(lái)表示年份。既然你已經(jīng)理解了INSERT語(yǔ)句是怎樣工作的了,讓我們轉(zhuǎn)到EMPLOYEES表中的其他部分:INSERTINTOEMPLOYEESVALUES('Bunyan','Paul','1970-07-04','Boston',12,70000);INSERTINTOEMPLOYEESVALUES('John','Adams','1992-01-21','Boston',20,100000);INSERTINTOEMPLOYEESVALUES('Smith','Pocahontas','1976-04-06','LosAngles',12,100000);INSERTINTOEMPLOYEESVALUES('Smith','Bessie','1940-05-02','Boston',5,200000);INSERTINTOEMPLOYEESVALUES('Jones','Davy','1970-10-10','Boston',8,45000);INSERTINTOEMPLOYEESVALUES('Jones','Indiana','1992-02-01','Chicago',NULL,NULL);在最后一項(xiàng)中,我們不知道Jones先生的工薪級(jí)別和年薪,所以我們輸入NULL(不要引號(hào))。NULL是SQL中的一種特殊情況,我們以后將進(jìn)行詳細(xì)的討論?,F(xiàn)在我們只需認(rèn)為NULL表示一種未知的值。有時(shí),像我們剛才所討論的情況,我們可能希望對(duì)某一些而不是全部的列進(jìn)行賦值。除了對(duì)要省略的列輸入NULL外,還可以采用另外一種INSERT語(yǔ)句,如下:INSERTINTOEMPLOYEES(FIRST_NAME,LAST_NAME,HIRE_DATE,BRANCH_OFFICE)VALUE('Indiana','Jones','1992-02-01','Indianapolis');這樣,我們先在表名之后列出一系列列名。未列出的列中將自動(dòng)填入缺省值,如果沒(méi)有設(shè)置缺省值則填入NULL。請(qǐng)注意我們改變了列的順序,而值的順序要對(duì)應(yīng)新的列的順序。如果該語(yǔ)句中省略了FIRST_NAME和LAST_NAME項(xiàng)(這兩項(xiàng)規(guī)定不能為空),SQL操作將失敗。讓我們來(lái)看一看上述INSERT語(yǔ)句的語(yǔ)法圖:INSERTINTOtable[(column{,column})]VALUES(columnvalue[{,columnvalue}]);和前一篇文章中一樣,我們用方括號(hào)來(lái)表示可選項(xiàng),大括號(hào)表示可以重復(fù)任意次數(shù)的項(xiàng)(不能在實(shí)際的SQL語(yǔ)句中使用這些特殊字符)。VALUE子句和可選的列名列表中必須使用圓括號(hào)。SELECT語(yǔ)句SELECT語(yǔ)句可以從一個(gè)或多個(gè)表中選取特定的行和列。因?yàn)椴樵兒蜋z索數(shù)據(jù)是數(shù)據(jù)庫(kù)管理中最重要的功能,所以SELECT語(yǔ)句在SQL中是工作量最大的部分。實(shí)際上,僅僅是訪問(wèn)數(shù)據(jù)庫(kù)來(lái)分析數(shù)據(jù)并生成報(bào)表的人可以對(duì)其他SQL語(yǔ)句一竅不通。SELECT語(yǔ)句的結(jié)果通常是生成另外一個(gè)表。在執(zhí)行過(guò)程中系統(tǒng)根據(jù)用戶的標(biāo)準(zhǔn)從數(shù)據(jù)庫(kù)中選出匹配的行和列,并將結(jié)果放到臨時(shí)的表中。在直接SQL(directSQL)中,它將結(jié)果顯示在終端的顯示屏上,或者將結(jié)果送到打印機(jī)或文件中。也可以結(jié)合其他SQL語(yǔ)句來(lái)將結(jié)果放到一個(gè)已知名稱的表中。SELECT語(yǔ)句功能強(qiáng)大。雖然表面上看來(lái)它只用來(lái)完成本文第一部分中提到的關(guān)系代數(shù)運(yùn)算“選擇”(或稱“限制”),但實(shí)際上它也可以完成其他兩種關(guān)系運(yùn)算一“投影”和“連接”,SELECT語(yǔ)句還可以完成聚合計(jì)算并對(duì)數(shù)據(jù)進(jìn)行排序。SELECT語(yǔ)句最簡(jiǎn)單的語(yǔ)法如下:SELECTcolumnsFROMtables;當(dāng)我們以這種形式執(zhí)行一條SELECT語(yǔ)句時(shí),系統(tǒng)返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個(gè)結(jié)果表。這就是實(shí)現(xiàn)關(guān)系投影運(yùn)算的一個(gè)形式。讓我們看一下使用圖1中EMPLOYEES表的一些例子(這個(gè)表是我們以后所有SELECT語(yǔ)句實(shí)例都要使用的。而我們?cè)趫D2和圖3中給出了查詢的實(shí)際結(jié)果。我們將在其他的例子中使用這些結(jié)果)。假設(shè)你想查看雇員工作部門(mén)的列表。那下面就是你所需要編寫(xiě)的SQL查詢:SELECTBRANCH_OFFICEFROMEMPLOYEES;以上SELECT語(yǔ)句的執(zhí)行將產(chǎn)生如圖2中表2所示的結(jié)果。由于我們?cè)赟ELECT語(yǔ)句中只指定了一個(gè)列,所以我們的結(jié)果表中也只有一個(gè)列。注意結(jié)果表中具有重復(fù)的行,這是因?yàn)橛卸鄠€(gè)雇員在同一部門(mén)工作(記住SQL從所選的所有行中將值返回)。要消除結(jié)果中的重復(fù)行,只要在SELECT語(yǔ)句中加上DISTINCT子句:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEES;這次查詢的結(jié)果如表3所示?,F(xiàn)在已經(jīng)消除了重復(fù)的行,但結(jié)果并不是按照順序排列的。如果你希望以字母表順序?qū)⒔Y(jié)果列出又該怎么做呢?只要使用ORDERBY子句就可以按照升序或降序來(lái)排列結(jié)果:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEESORDERBYBRANCH_OFFICEASC;這一查詢的結(jié)果如表4所示。請(qǐng)注意在ORDERBY之后是如何放置列名BRANCH_OFFICE的,這就是我們想要對(duì)其進(jìn)行排序的列。為什么即使是結(jié)果表中只有一個(gè)列時(shí)我們也必須指出列名呢?這是因?yàn)槲覀冞€能夠按照表中其他列進(jìn)行排序,即使它們并不顯示出來(lái)。列名BRANCH_OFFICE之后的關(guān)鍵字ASC表示按照升序排列。如果你希望以降序排列,那么可以用關(guān)鍵字DESC。同樣我們應(yīng)該指出ORDERBY子句只將臨時(shí)表中的結(jié)果進(jìn)行排序;并不影響原來(lái)的表。假設(shè)我們希望得到按部門(mén)排序并從工資最高的雇員到工資最低的雇員排列的列表。除了工資括號(hào)中的內(nèi)容,我們還希望看到按照聘用時(shí)間從最近聘用的雇員開(kāi)始列出的列表。以下是你將要用到的語(yǔ)句:SELECTBRANCH_OFFICE,FIRST_NAME,LAST_NAME,SALARYHIRE_DATEFROMEMPLOYEESORDERBYSALARYDESC,HIRE_DATEDESC;這里我們進(jìn)行了多列的選擇和排序。排序的優(yōu)先級(jí)由語(yǔ)句中的列名順序所決定。SQL將先對(duì)列出的第一個(gè)列進(jìn)行排序。如果在第一個(gè)列中出現(xiàn)了重復(fù)的行時(shí),這些行將被按照第二列進(jìn)行排序,如果在第二列中又出現(xiàn)了重復(fù)的行時(shí),這些行又將被按照第三列進(jìn)行排序……如此類推。這次查詢的結(jié)果如表5所示。將一個(gè)很長(zhǎng)的表中的所有列名寫(xiě)出來(lái)是一件相當(dāng)麻煩的事,所以SQL允許在選擇表中所有的列時(shí)使用*號(hào):SELECT*FROMEMPLOYEES;這次查詢返回整個(gè)EMPLOYEES表,如表1所示。下面我們對(duì)開(kāi)始時(shí)給出的SELECT語(yǔ)句的語(yǔ)法進(jìn)行一下更新(豎直線表示一個(gè)可選項(xiàng),允許在其中選擇一項(xiàng)。):SELECT[DISTINCT](column[{,columns}])!*FROMtable[{,table}][ORDERBYcolumn[ASC]IDESC[{,column[ASC]IDESC}]];定義選擇標(biāo)準(zhǔn)在我們目前所介紹的SELECT語(yǔ)句中,我們對(duì)結(jié)果表中的列作出了選擇但返回的是表中所有的行。讓我們看一下如何對(duì)SELECT語(yǔ)句進(jìn)行限制使得它只返回希望得到的行:SELECTcolumnsFROMtables[WHEREpredicates];WHERE子句對(duì)條件進(jìn)行了設(shè)置,只有滿足條件的行才被包括到結(jié)果表中。這些條件由斷言(predicate)進(jìn)行指定(斷言指出了關(guān)于某件事情的一種可能的事實(shí))。如果該斷言對(duì)于某個(gè)給定的行成立,該行將被包括到結(jié)果表中,否則該行被忽略。在SQL語(yǔ)句中斷言通常通過(guò)比較來(lái)表示。例如,假如你需要查詢所有姓為Jones的職員,則可以使用以下SELECT語(yǔ)句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones';LAST_NAME='Jones部分就是斷言。在執(zhí)行該語(yǔ)句時(shí),SQL將每一行的LAST_NAME列與“Jones”進(jìn)行比較。如果某一職員的姓為Jones”,即斷言成立,該職員的信息將被包括到結(jié)果表中(見(jiàn)表6)。使用最多的六種比較我們上例中的斷言包括一種基于“等值”的比較(LAST_NAME='Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:格工等于=不等于<>小于<大于>小于或等于<=大于或等于>=下面給出了不是基于等值比較的一個(gè)例子:SELECT*FROMEMPLOYEESWHERESALARY>50000;這一查詢將返回年薪高于$50,000.00的職員(參見(jiàn)表7)。邏輯連接符有時(shí)我們需要定義一條不止一種斷言的SELECT語(yǔ)句。舉例來(lái)說(shuō),如果你僅僅想查看DavyJones的信息的話,表6中的結(jié)果將是不正確的。為了進(jìn)一步定義一個(gè)WHERE子句,用戶可以使用邏輯連接符AND,OR和NOT。為了只得到職員DavyJones的記錄,用戶可以輸入如下語(yǔ)句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ANDFIRST_NAME='Davy';在本例中,我們通過(guò)邏輯連接符AND將兩個(gè)斷言連接起來(lái)。只有兩個(gè)斷言都滿足時(shí)整個(gè)表達(dá)式才會(huì)滿足。如果用戶需要定義一個(gè)SELECT語(yǔ)句來(lái)使得當(dāng)其中任何一項(xiàng)成立就滿足條件時(shí),可以使用OR連接符:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ORLAST_NAME='Smith';有時(shí)定義一個(gè)斷言的最好方法是通過(guò)相反的描述來(lái)說(shuō)明。如果你想要查看除了Boston辦事處的職員以外的其他所有職員的信息時(shí),你可以進(jìn)行如下的查詢:SELECT*FROMEMPLOYEESWHERENOT(BRANCH_OFFICE='Boston');關(guān)鍵字NOT后面跟著用圓括號(hào)括起來(lái)的比較表達(dá)式。其結(jié)果是對(duì)結(jié)果取否定。如果某一職員所在部門(mén)的辦事處在Boston,括號(hào)內(nèi)的表達(dá)式返回true,但是NOT操作符將該值取反,所以該行將不被選中。斷言可以與其他的斷言嵌套使用。為了保證它們以正確的順序進(jìn)行求值,可以用括號(hào)將它們括起來(lái):SELECT*FROMEMPLOYEESWHERE(LAST_NAME='Jones'ANDFIRST_NAME='Indiana')OR(LAST_NAME='Smith'ANDFIRST_NAME='Bessie');SQL沿用數(shù)學(xué)上標(biāo)準(zhǔn)的表達(dá)式求值的約定一圓括號(hào)內(nèi)的表達(dá)式將最先進(jìn)行求值,其他表達(dá)式將從左到右進(jìn)行求值。以上對(duì)邏輯連接符進(jìn)行了說(shuō)明,在對(duì)下面的內(nèi)容進(jìn)行說(shuō)明之前,我們?cè)僖淮螌?duì)SELECT語(yǔ)句的語(yǔ)法進(jìn)行更新:SELECT[DISTINCT](column[{,column}])|*FROMtable[{,table}][ORDERBYcolumn[ASC]|[DESC[{,column[ASC]|[DESC}]]WHEREpredicate[{logical-connectorpredicate}];NULL和三值邏輯在SQL中NULL是一個(gè)復(fù)雜的話題,關(guān)于NULL的詳細(xì)描述更適合于在SQL的高級(jí)教程而不是現(xiàn)在的入門(mén)教程中進(jìn)行介紹。但由于NULL需要進(jìn)行特殊處理,并且你也很可能會(huì)遇到它,所以我們還是簡(jiǎn)略地進(jìn)行一下說(shuō)明。首先,在斷言中進(jìn)行NULL判斷時(shí)需要特殊的語(yǔ)法。例如,如果用戶需要顯示所有年薪未知的職員的全部信息,用戶可以使用如下SELECT語(yǔ)句:SELECT*FROMEMPLOYEESWHERESALARYISNULL;相反,如果用戶需要所有已知年薪數(shù)據(jù)的職員的信息,你可以使用以下語(yǔ)句:SELECT*FROMEMPLOYEESWHERESALARYISNOTNULL;請(qǐng)注意我們?cè)诹忻笫褂昧岁P(guān)鍵字ISNULL或ISNOTNULL,而不是標(biāo)準(zhǔn)的比較形式:COLUMN=NULL、COLUMN<>NULL或是邏輯操作符NOT(NULL)。這種形式相當(dāng)簡(jiǎn)單。但當(dāng)你不明確地測(cè)試NULL(而它們確實(shí)存在)時(shí),事情會(huì)變得很混亂。例如,回過(guò)頭來(lái)看我

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論