C#面試寶典.doc_第1頁
C#面試寶典.doc_第2頁
C#面試寶典.doc_第3頁
C#面試寶典.doc_第4頁
C#面試寶典.doc_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

net下面調(diào)用access中存儲過程的方法在Sql Server中使用存儲過程是大家都比較熟悉的了,前不久自己作了一個小東東,數(shù)據(jù)庫使用的是MS Access數(shù)據(jù)庫,也想著試試用存儲過程是否可行。畢竟,存儲過程與代碼的關(guān)系不是非常大,數(shù)據(jù)庫和存儲過程的修改有些是不用更改編碼的。下面貼出我的代碼,大家會發(fā)現(xiàn),其實跟調(diào)用Sql Server的存儲過程是完全一樣的,不同的僅僅在于存儲過程的名稱。以刪除人員信息為例:1. 這里是數(shù)據(jù)訪問層的一段代碼,直接調(diào)用存儲過程。public class Person/定義存儲過程,注意,這里的存儲過程用 括起來了。private 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)OleDbParameter param = new OleDbParameternew OleDbParameter(PARM_PERSON_PERSONID,OleDbType.Integer);param0.Value=PersonID;return param;/ / 刪除人員信息/ / 人員ID/ 成功返回True;失敗返回Falsepublic bool Delete(int personID)/ASP_PERSON_DELETE 存儲過程的名稱。OleDbParameter param=this.GetDeleteParam(personID);try/ 調(diào)用方式?jīng)]有變化。int i=Utility.Tools.CreateOleDbCommandExecuteNonQuery(ASP_PERSON_DELETE,param);if (i0)return true;catchreturn false;2.再來看看Access數(shù)據(jù)庫里面跟Sql Server有什么區(qū)別:Access數(shù)據(jù)庫中的存儲過程是以“查詢”的方式存放的,打開你的Access數(shù)據(jù)庫,選中“查詢”,選中“新建”,先建立一個簡單的查詢。選擇表和需要的字段以及需要的參數(shù)。這時,再選中工具欄中的SQL視圖,您可以看到如下的語句:PARAMETERS PersonID Short;DELETE *FROM PersonInfoWHERE PersonInfo.PersonID=PersonID;如果參數(shù)多,請參照: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 ( 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中測試你的存儲過程會比較麻煩些:右鍵選中你的存儲過程,選擇“打開”即可,但是參數(shù)不要輸入錯誤。Access中寫存儲過程是閉架麻煩的,畢竟不象Sql Server那樣對存儲過程的支持好,所以要特別細心而且強烈建議大家經(jīng)常保存。.net數(shù)據(jù)庫連接池相關(guān)的面試題如何實現(xiàn)連接池?確保你每一次的連接使用相同的連接字符串(和連接池相同);只有連接字符串相同時連接池才會工作。如果連接字符串不相同,應(yīng)用程序就不會使用連接池而是創(chuàng)建一個新的連接。優(yōu)點使用連接池的最主要的優(yōu)點是性能。創(chuàng)建一個新的數(shù)據(jù)庫連接所耗費的時間主要取決于網(wǎng)絡(luò)的速度以及應(yīng)用程序和數(shù)據(jù)庫服務(wù)器的(網(wǎng)絡(luò))距離,而且這個過程通常是一個很耗時的過程。而采用數(shù)據(jù)庫連接池后,數(shù)據(jù)庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認證到數(shù)據(jù)庫服務(wù)器,這樣就節(jié)省了時間。缺點數(shù)據(jù)庫連接池中可能存在著多個沒有被使用的連接一直連接著數(shù)據(jù)庫(這意味著資源的浪費)。技巧和提示1 當你需要數(shù)據(jù)庫連接時才去創(chuàng)建連接池,而不是提前建立。一旦你使用完連接立即關(guān)閉它,不要等到垃圾收集器來處理它。2 在關(guān)閉數(shù)據(jù)庫連接前確保關(guān)閉了所有用戶定義的事務(wù)。3 不要關(guān)閉數(shù)據(jù)庫中所有的連接,至少保證連接池中有一個連接可用。如果內(nèi)存和其他資源是你必須首先考慮的問題,可以關(guān)閉所有的連接,然后在下一個請求到來時創(chuàng)建連接池。連接池FAQ1 何時創(chuàng)建連接池?當?shù)谝粋€連接請求到來時創(chuàng)建連接池;連接池的建立由數(shù)據(jù)庫連接的連接字符創(chuàng)來決定。每一個連接池都與一個不同的連接字符串相關(guān)。當一個新的連接請求到來時如果連接字符串和連接池使用的字符串相同,就從連接池取出一個連接;如果不相同,就新建一個連接池。2 何時關(guān)閉連接池?當連接池中的所有連接都已經(jīng)關(guān)閉時關(guān)閉連接池。3 當連接池中的連接都已經(jīng)用完,而有新的連接請求到來時會發(fā)生什么?當連接池已經(jīng)達到它的最大連接數(shù)目時,有新的連接請求到來時,新的連接請求將放置到連接隊列中。當有連接釋放給連接池時,連接池將新釋放的連接分配給在隊列中排隊的連接請求。你可以調(diào)用close和dispose將連接歸還給連接池。4 我應(yīng)該如何允許連接池?對于.NET應(yīng)用程序而言,默認為允許連接池。(這意味著你可以不必為這件事情做任何的事情)當然,如果你可以在SQLConnection對象的連接字符串中加進Pooling=true;確保你的應(yīng)用程序允許連接池的使用。5 我應(yīng)該如何禁止連接池?ADO.NET默認為允許數(shù)據(jù)庫連接池,如果你希望禁止連接池,可以使用如下的方式:1) 使用SQLConnection對象時,往連接字符串加入如下內(nèi)容:Pooling=False;2) 使用OLEDBConnection對象時,往連接字符串加入如下內(nèi)容:OLE DB Services=-4;NET里面的datagrid翻頁大多是先把數(shù)據(jù)讀全部取到dataset里面,但是遇到10W條數(shù)據(jù)以上,這樣的翻頁事件開銷會很大,頁面執(zhí)行起來反映很慢,你有什么好方法解決?在數(shù)據(jù)量大的時候,有兩個解決辦法1.使用存儲過程.并且,并非因為存儲過程比較快的原因.由于在數(shù)據(jù)庫內(nèi)部的存儲過程,能夠?qū)崿F(xiàn)一些特殊的功能,比如說,可以直接根據(jù)當前的排序結(jié)果,僅僅取需要的幾條數(shù)據(jù),如此,無論數(shù)據(jù)是多少,它僅僅取需要的幾條.2.在實際的操作中,取出的數(shù)據(jù),并非你有10萬條,它就會把10萬條全部取出來,而是受限于服務(wù)器的緩存,其實一次一般僅取1000條左右的記錄,無論你數(shù)據(jù)多少,它僅會一次取這么多出來.所以,配合分頁控件,再配合.NET提供的加載N條數(shù)據(jù)的方法,數(shù)據(jù)量大的情況下,不見得就會慢.據(jù)我測試,真正慢的,是在取數(shù)據(jù)總共多少條這個步驟上.此操作在數(shù)據(jù)少時,沒有影響,但在百萬條記錄以上時,求取數(shù)據(jù)總數(shù),耗時就會大量增加.所以,大數(shù)據(jù)量條件下,即不應(yīng)再顯示”共幾條/當前第幾條”這樣的信息.如何提高.NET的性能 ?使用異步方式調(diào)用Web服務(wù)和遠程對象只要有可能就要避免在請求的處理過程中對Web服務(wù)和遠程對象的同步調(diào)用,因為它占用的是的ASP.NET 線程池中的工作線程,這將直接影響Web服務(wù)器響應(yīng)其它請求的能力。2 使用適當?shù)腃aching策略來提高性能3 判斷字符串,不要用”比較。/避免if(strABC!=null & strABC!=”)/推薦if(!strABC.IsNullOrEmpty)4 頁面優(yōu)化5 用完馬上關(guān)閉數(shù)據(jù)庫連接6 盡量使用存儲過程,并優(yōu)化查詢語句7 只讀數(shù)據(jù)訪問用SqlDataReader,不要使用DataS的錯誤處機制方面的幾個問題net的錯誤處機制是?采用try-catch-finally結(jié)構(gòu),為什么不提倡catch(Exception) ?try.catch在出現(xiàn)異常的時候影響性能; 應(yīng)該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等catch(Exception e)throw e;和catch(Exception e)throw;的區(qū)別將發(fā)生的異常對象拋出,另一個只是拋出異常,并沒有拋出原異常對象)error和exception區(qū)別:error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況.NET考題1、 傳入某個屬性的set方法的隱含參數(shù)的名稱是什么?Value2、 如何在C中實現(xiàn)繼承?: 類名(冒號加類名)3、 C#支持多重繼承么?不支持4、 被protected修飾的屬性/方法在何處可以訪問?類內(nèi)部及繼承類中5、 私有成員會被繼承么?會,但是不能被訪問。所以看上去他們似乎是不能被繼承的,但實際上確實被繼承了。6、 請描述一下訪問修飾符protected internal.在同一個Assembly中,他的訪問級別和public一樣,而跨Assembly訪問時,他的訪問級別同protected一樣。即protected的范圍 + internal的范圍。7、 C#提供一個默認的無參數(shù)構(gòu)造函數(shù),當我實現(xiàn)了另一個有一個參數(shù)的構(gòu)造函數(shù)時候,還想保留這個無參數(shù)的構(gòu)造函數(shù),這樣我應(yīng)該寫幾個構(gòu)造函數(shù)?2個,一旦你實現(xiàn)了一個構(gòu)造函數(shù),C#就不會再提供默認的構(gòu)造函數(shù)了,所以需要手動實現(xiàn)那個無參數(shù)構(gòu)造函數(shù)8、 C#中所有對象共同的基類是什么?System.Object9、 重載和重寫有什么區(qū)別?重載是指同名方法,不同的參數(shù),不同的實現(xiàn)而重寫則是覆蓋父類中的方法實現(xiàn)10、 在方法定義中,virtual有什么含意?Virtual標記方法為虛方法,可以在子類中用new來覆蓋重寫,多用于實現(xiàn)多態(tài)11、 可以重寫私有的虛方法么?不可以12、 能夠阻止某一個類被其他類繼承么?可以,用封裝類13、 能夠?qū)崿F(xiàn)允許某個類被繼承,但不允許其中的某個方法被重寫么?可以,標記這個類為public,并標記這個方法為sealed14、 如何區(qū)別重載方法?不同的參數(shù)類型,不同的參數(shù)個數(shù),不同的參數(shù)順序15、 Const和readonly有什么區(qū)別?const可以用于局部常量,而readonly,實際是類的initonly字段,顯然不能是局部的。16、 如何在表中隨機取記錄數(shù)100條?請寫出示例SQL語句。(數(shù)據(jù)庫指SQL Server,下同)SELECT TOP 100 * FROM table_name ORDER BY NEWID()17、 請列舉出幾種有效防止SQL注入漏洞的措施?1、程序中過濾掉“”“%”“”“”等字符2、使用存儲過程傳遞參數(shù),并在存儲過程中不使用sql語句拚接查詢條件。18、 刪除表中重復(fù)的記錄(指某兩條或多條記錄的所有字段值均相同),但需保留1條。請寫出示例SQL語句。select distinct * into #Tmp from tableNamedrop table tableNameselect * into tableName from #Tmpdrop table #Tmp19、 向有標識(IDENTITY)列字段的表添加記錄是否可行,如果可行,應(yīng)如何操作?可使用SQL語句說明??梢裕韵抡Z句表示將顯式插入的開關(guān)打開,寫入記錄,然后關(guān)閉顯式插入SET IDENTITY_INSERT Game_ActivityUserTotal ONinsert Game_ActivityUserTotal(id) values(1)SET IDENTITY_INSERT Game_ActivityUserTotal OFF20、 假設(shè)表DataTableDictTB包含一個字段MaxID(INT),且僅有一條記錄。如何在并發(fā)操作情況下,修改MaxID字段加一,并取出更新后的MaxID數(shù)值,同時要求讀取出來的結(jié)果不重復(fù)?請寫出示例SQL語句。參考答案1:DECLARE MaxID INTUPDATEDataTableDictTBSETMaxID = MaxID + 1,MaxID = MaxID + 1參考答案2:DECLARE MaxID INTBEGIN TRANBEGINUPDATEDataTableDictTBSETMaxID = MaxID + 1SELECT MaxID = MaxID FROM DataTableDictTBEND21、 頁面A.aspx的內(nèi)容如下:Window.open(“B.aspx?id=1&CodeName=通訊應(yīng)用類”)頁面B.aspx的內(nèi)容如下:為何頁面B.aspx輸出的CodeName內(nèi)容是亂碼,如何解決?頁面A.aspx的內(nèi)容修改如下:Window.open(“B.aspx?id=1&CodeName=” + escap(通訊應(yīng)用類)22、 禁用aspx頁面的ViewState會導(dǎo)致哪些功能不可用?1、 頁面中的事件驅(qū)動失效2、 用戶提交的信息將在提交后的不再保存顯示3、 頁面中的ViewState信息不再存在,這樣達到頁面瘦身進而提供頁面顯示性能23、 使用A開發(fā)的網(wǎng)站有哪幾種sessionState存儲方式,分別各是什么?1、 進程內(nèi)(InProcess)存儲方式2、 進程外(SessionStateService)存儲方式3、 數(shù)據(jù)庫(SQL Server)存儲方式24、 使用哪些方式的彈出頁面會被大部分頁面攔截工具所攔截,相反哪些又不會被攔截?1、 會被攔截的方式:window.open2、 不會被攔截的方式:、window.showModalDialog25、 請簡要的談?wù)勀銓jax技術(shù)的認識。XMLHttp是ajax的最常用傳輸方式26、 對于長時間裝載的ASP.NET頁面如何在客戶端瀏覽器中顯示進度(僅模擬,不要求精確顯示)?1、 可以在到達目的頁面之前,先瀏覽帶有顯示進度條的頁面,再停頓幾秒后到達目的頁面2、 如在按鈕事件中加入如下代碼:Response.Write(“”);Response.Write(“_”);Response.Write(“”);Response.Write(“mydiv.innerText = ”;”);Response.Write(“;”);Response.Write(“var dots = 0;var dotmax = 10;function ShowWait()”);Response.Write(“var output; output = 正在裝載頁面;dots+;if(dots=dotmax)dots=1;”);Response.Write(“for(var x = 0;x dots;x+)output += ;mydiv.innerText = output;”);Response.Write(“function StartShowWait()mydiv.style.visibility = visible; “);Response.Write(“window.setInterval(ShowWait(),1000);”);Response.Write(“function HideWait()mydiv.style.visibility = hidden;”);Response.Write(“window.clearInterval();”);Response.Write(“StartShowWait();”);Response.Flush();Thread.Sleep(10000);27、 自定義page基類時導(dǎo)致你在Vs.Net中無法所見即所得的編輯Aspx頁面,打開頁面時將拋出以下錯誤,你只能看到Html代碼界面,請問如何解決?1、 出現(xiàn)該錯誤后將該工程重新編譯通過后,再次打開a

溫馨提示

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

評論

0/150

提交評論