.NET程序員的數據庫面試題及答案

Q1:維護數據庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯?爲什麼
答:儘可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空字段)實現,這種方式的效率最好;其次用觸發器,這種方式可以保證無論何種業務系統訪問數據庫都能維持數據庫的完整性、一致性;最後再考慮用自寫業務邏輯實現,但這種方式效率最低、編程最複雜,當爲下下之策。

Q2:ADO。NET相對於ADO等主要有什麼改進?
答:我個人認爲,ADO.NET與ADO相比,優勢在於提供了數據集和數據適配器,有利於實現分佈式處理,降低了對數據庫服務器資源的消耗

Q3:ASP。NET與ASP相比,主要有哪些進步?
答:如果一定要說ASP.NET比ASP進步,還是有的:在形式上實現了面向對象編程;預編譯的服務器端代碼;更好的安全機制(那些ASPX文件的後臺代碼是以另外一個帳號運行的,與啓動IIS的帳號不相同)等。
Q4:C#中的委託是什麼?事件是不是一種委託?
答:委託本質上是一種“方法接口”,它相當於C/C 中的函數指針,當然它比函數指針安全,在C#中通常用於事件處理。與JAVA相比,可以避免使用大量小粒度的匿名類。

事件不是委託,不過由於事件的性質決定了處理它的程序邏輯能訪問的參數,因此,在C#中處理事件的邏輯都包裝爲委託(一種“方法接口”)。實際上,如果你處理自定義的事件,就像JAVA中那樣用接口實現也是可以的,不過這麼做在C#一般沒有什麼特別的好處。

Q5.您要創建一個顯示公司員工列表的應用程序。您使用一個DataGrid控件顯示員工的列表。您打算修改這個控件以便在這個Grid的Footer顯示員工合計數。請問您應該怎麼做?( C? )

A.重寫OnPreRender事件,當Grid的Footer行被創建時顯示合計數。
  B.重寫OnItemCreated事件,當Grid的Footer行被創建時顯示合計數。
  C.重寫OnItemDataBound事件,當Grid的Footer行被創建時顯示合計數。
  D. 重寫OnLayout事件,當Grid的Footer行被創建時顯示合計數。

Q6. 您要創建ASP.NET應用程序用於運行AllWin公司內部的Web站點,這個應用程序包含了50個頁面。您想要配置這個應用程序以便當發生一個 HTTP代碼錯誤時它可以顯示一個自定義的錯誤頁面給用戶。您想要花最小的代價完成這些目標,您應該怎麼做?(多選)( CD )
  A.在這個應用程序的Global.asax文件中創建一個Application_Error過程去處理ASP.NET代碼錯誤。
  B.在這個應用程序的Web.config文件中創建一個applicationError節去處理ASP.NET代碼錯誤。
  C.在這個應用程序的Global.asax文件中創建一個CustomErrors事件去處理HTTP錯誤。
  D.在這個應用程序的Web.config文件中創建一個CustomErrors節去處理HTTP錯誤。
  E.在這個應用程序的每一頁中添加一個Page指示符去處理ASP.NET 代碼錯誤。
  F. 在這個應用程序的每一頁中添加一個Page指示符去處理ASP.NET HTTP錯誤。

Q7. 您的公司有一個DB Server,名爲AllWin,其上裝了MS SQLSERVER 2000。現在需要您寫一個數據庫連接字符串,用以連接AllWin上SQL SERVER中的一個名爲PubBase實例的Test庫。請問,應該選擇下面哪一個字符串?( B )
  A. “Server=AllWin;Data Source=PubBase;Initial Catalog=Test;Integrated Security=SSPI”
  B. “Server= AllWin;Data Source=PubBase;Database=Test;Integrated Security= SSPI”
  C. “Data Source= AllWin /PubBase;Initial Category=PubBase;Integrated Security= SSPI”
  D. “Data Source= AllWin / PubBase;Database=Test;Integrated Security= SSPI”

Q8. 您爲AllWin公司創建了一個ASP.NET應用程序。這個應用程序調用一個 Xml Web Service。這個 Xml Web Service 將返回一個包含了公司僱員列表的DataSet對象。請問您該如何在這個程序中使用這個 Xml Web Service?( ? )
  A.在“引用”對話框的.Net標籤中選擇 System.Web.Services.dll。
  B.在“Web引用”對話框中輸入這個 XML Web service 的地址。
  C.在您的 Global.asax.cs 中添加一條 using 語句並指定這個 XML Web service 的地址。
  D.在您的 Global.asax.cs 中寫一個事件處理器導入這個 Xml Web Service 相應的 .wsdl 和 .disco 文件。

Q9. 您要創建一個ASP.NET應用程序在DataGrid控件中顯示一個經過排序的列表。產品數據被存放於一個名爲PubBase的Microsoft SQL Server 數據庫。每個產品的主鍵是ProductID,Numeric型並且每個產品有一個字母描述字段,名爲ProductName。您使用一個 SqlDataAdapter對象和一個SqlCommand對象通過調用一個存儲過程從數據庫中獲取產品數據。您將SqlCommand對象的 CommandType屬性設置爲CommandType.StoredProcedure,並將它的CommandText屬性設置爲 procProductList。您成功的獲取了一個DataTable對象,其中是已經按ProductID降序排列的產品列表。您打算顯示以相反的字母順序排列的ProductName,請問該怎麼做? ( B )
  A. 將SqlCommand對象的CommandType屬性修改爲CommandType.Text,將CommandText屬性修改爲”SELECT * FROM procProductList ORDER BY ProductName DESC”。然後將這個DataTable對象綁定到DataGrid控件。
  B. 創建一個基於這個DataTable對象的新的DataView並將這個DataView的Sort屬性設置爲“ProductName DESC”。然後將這個DataView對象綁定到DataGrid控件。
  C. 將DataGrid控件的AllowSorting屬性設置爲True,並將DataGridColumn的SortExpression屬性設置爲 “ProductName DESC”.以顯示ProductName。然後將這個DataTable對象綁定到DataGrid控件。
  D. 將DataTable對象的DisplayExpression屬性設置爲 “ORDER BY ProductName DESC”.。然後將這個DataTable對象綁定到DataGrid控件。

Q10.C#代碼實現,確保windows程序只有一個實例(instance)
///
///應用程序的主入口點。
///
[STAThread]
staticvoid Main()
{
//防止程序多次運行
if(!OneInstance.IsFirst("GetPayInfo"))
{
MessageBox.Show ("警告:程序正在運行中! 請不要重複打開程序!可在右下角系統欄找到!","程序錯誤提示:",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
Application.Run(new Form1());
}
// ******************* 防止程序多次執行 **************************
publicabstractclass OneInstance
{
///
///判斷程序是否正在運行
///
/// ///如果程序是第一次運行返回True,否則返回False
publicstaticbool IsFirst(string appId)
{
bool ret=false;
if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero)
{
CreateMutex(IntPtr.Zero,0,appId);
ret=true;
}
return ret;
}
[DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
privatestaticextern IntPtr OpenMutex(
uint dwDesiredAccess, // access
int bInheritHandle, // inheritance option
string lpName // object name
);

[DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
privatestaticextern IntPtr CreateMutex(
IntPtr lpMutexAttributes, // SD
int bInitialOwner, // initial owner
string lpName // object name
);
}

Q11. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部纔可以訪問。protected : 保護成員,該類內部和繼承類中可以訪問。public : 公共成員,完全公開,沒有訪問限制。internal: 在同一命名空間內可以訪問。

Q12. 寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作爲主鍵, 注意:ID可能不是連續的。)
select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

Q13 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
1. 使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session變量
3.使用Server.Transfer
2。請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
session(viewstate) 簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被僞造
input ttype="hidden" 簡單,可能被僞造
url參數簡單,顯示於地址欄,長度有限
數據庫穩定,安全,但性能相對弱

Q14.override與重載的區別
Override用來重寫父類的方法,重載使用相同名的方法或操作符擁有不同類型的參數

Q15、.net的錯誤處理機制是什麼
.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。
Q16、C#中接口和類的異同
接口和類都是類,不同的事,接口只包含方法或屬性的聲明,不包含具體實現方法的代碼,接口可以實現多繼承,而類只能是單繼承,繼承接口的類必須實現接口中聲明的方法或屬性。接口主要定義一種規範,統一調用方法,在大型項目中接口正發揮日益重要的作用。

Q17、DataReader和DataSet的異同
DataReader 和DataSet最大的區別在於,DataReader使用時始終佔用SqlConnection,在線操作數據庫..任何對SqlConnection 的操作都會引發DataReader的異常..因爲DataReader每次只在內存中加載一條數據,所以佔用的內存是很小的..因爲 DataReader的特殊性和高性能.所以DataReader是隻進的..你讀了第一條後就不能再去讀取第一條了..
DataSet則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接..因爲DataSet將數據全部加載在內存中.所以比較消耗內存...但是確比DataReader要靈活..可以動態的添加行,列,數據.對數據庫進行回傳更新操作...

Q18. 在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
Using 引入一個名子空間,或在使用了一個對像後自動調用其IDespose,New 實例化一個對像,或修飾一個方法,表此方法完全重寫此方法

Q19.在下面的例子裏
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B(){
y=-1;
}
public override void PrintFields(){
Console.WriteLine("x={0},y={1}",x,y);
}
當使用new B()創建B的實例時,產生什麼輸出?X=1,Y=0

Q20.下面的例子中
using System;
class A
{
public static int X;
static A(){
X=B.Y 1;
}
}
class B
{
public static int Y=A.X 1;
static B(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
產生的輸出結果是什麼?x=1,y=2

Q21.談談類和結構的區別?
最大區別一個是引用類型,一個是值類型 默認成員訪問爲public是另外一個區別

Q22. 在.net(C# or vb.net)中如何獲得當前窗體或控件的句柄,特別是控件本身的句柄(請列舉)。
this(C#) Me(vb.net).

Q23.在.net(C# or vb.net)中如何用戶自定義消息,並在窗體中處理這些消息。
在form中重載DefWndProc函數來處理消息:
protected override void DefWndProc ( ref System.WinForms.Message m )
{
switch(m.msg)
{
case WM_Lbutton :
 ///string與MFC中的CString的Format函數的使用方法有所不同
 string message = string.Format("收到消息!參數爲:{0},{1}",m.wParam,m.lParam);
 MessageBox.Show(message);///顯示一個消息框
 break;
case USER:
處理的代碼
default:
 base.DefWndProc(ref m);///調用基類函數處理非自定義消息。
 break;
}
}

Q24. 在.net(C# or vb.net)如何啓動另一個程序。
process

Q25. 在.net(C# or vb.net)中如何取消一個窗體的關閉
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}

Q26. 在.net(C# or vb.net)中,Appplication.Exit 還是 Form.Close有什麼不同?
答案:一個是退出整個應用程序,一個是關閉其中一個form

Q27. 在C#中有一個double型的變量,比如10321.5,比如122235401.21644,作爲貨幣的值如何按各個不同國家的習慣來輸出。比如美國用$10,321.50和$122,235,401.22而在英國則爲£10 321.50和£122 235 401.22
答案:
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");爲英國貨幣類型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章