期中考參考解答。


作者: | 2008/11/06 | 留言


有點無聊但很重要的參考解答。

08Fall 商用程式設計 期中考參考解答

一、名詞解釋:

1. TableAdapter

TableAdapter主要是提供應用程式與資料庫之間的通訊。TableAdapter會連接到資料庫、執行查詢或預存程序,然後傳回一個已填入資料的新資料表,或是將傳回之資料填入現有的DataTable。它也可用來將應用程式中更新的資料傳回到資料庫。

2. DataSet

從原始資料庫取得的部份資料集合,類似記憶體中的資料庫(離線儲存資料),可以存放多個資料表資料。

3. BindingSource

為資料來源(DataSet)與資料繫結控制項(Data Bound Control)之間的橋樑。當使用者從控制項上編輯資料,或要求排序時,都會主動透過BindingSource和資料來源溝通。

4. DataView

主要的用途可以用來對存放在DataSet中的記錄執行過濾、排序或搜尋的操作。

5. DataReader

DataReader物件允許用戶端從資料來源擷取唯讀、順向的資料流。使用 DataReader 物件可以提高應用程式的效能,方法是在資料可用時立即擷取它,而不是等待傳回查詢的整個結果,以及 (依預設) 一次只將一個資料列儲存到記憶體中,進而減少系統負擔。

6. Stored Procedure

將SQL敘述做成資料庫中的預存程序(Stored Procedure),讓不同的應用程式或網頁都可以使用。將常用的SQL敘述做成資料庫中的預存程序,除了可以給不同的應用程式或網頁使用之外,還可以提升資料庫操作的效能和安全性。

二、簡答題:

1. 請試述資料庫「連線」與「離線」的操作方式有何不同。

連線的操作方式 :

在不中斷對資料庫的狀態下,對資料庫進行新增、刪除、修改和查詢的動作。

優點:

1. 因不需重新建立連線,因此效能較好。

2. 方便查詢最新的資料內容。

缺點:佔用資料庫的連線數,佔用愈多成本愈高。

離線的操作方式:

先從資料庫將資料讀到應用程式中,然後中斷對資料庫的連線,把資料庫的記錄留在應用程式中慢慢操作,待操作結束後重新建立對資料庫的連線,再將修改後的記錄全部寫回資料庫。

優點:

1. 佔用資料庫連線時間很短,因此可同時服務多位使用者。

2. 適用於網頁。

缺點: 資料庫應用程式離線愈久,資料不一致的現象愈可能發生 (造成資料衝突)。

2. 請分別試述Windows驗證模式與SQL Server驗證模式。

Windows 驗證模式

使用此模式管制應用程式的登入,表示使用者必須登入Windows網路,再使用登入Windows網路的帳號和密碼登入SQL
Server。預設系統管理員(Administrator)為SQL Server的最高權限管理員。

優點:

安全:應用程式不會將帳密以純文字方式送給SQL Server驗證,且應用程式不需儲存連線帳密。

方便:應用程式不需要製作要求使用者輸入登入資料庫的帳密介面。

有效管理帳號:應用程式可利用Windows鎖定帳號、帳號逾時、以及帳號登入管制時間等功能。

缺點:

資料庫使用者須有Windows帳號

開放權限廣:因持有Windows帳號,所以使用者可使用Windows開放給登入帳號的所有權限。

SQL Server 驗證模式

使用此模式管制應用程式的登入,表示使用者必須使用SQL Server 帳號密碼登入SQL Server。不過,微軟說明SQL Server
提供驗證的目的只是為了與舊版相容,因此請盡可能使用 Windows 驗證。

3. 請試述SQL Injection攻擊與防止方式。

SQL Injection式的駭客攻擊:

起因於資料庫應用程式未檢查使用者輸入的資料是否內含惡意攻擊的SQL敘述,就拿來組合成欲執行的SQL敘述,然後送給資料庫伺服器執行,造成資料庫中的記錄遭到破壞。

防止SQL Injection:

可在程式中加上輸入資料型態檢查、資料長度檢查與資料內容檢查,並且妥善使用權限管理以及透過預存程式(Stored-procedure)來執行SQL敘述。

4. 請試述Command類別提供的ExecuteReader, ExecuteNonQuery 及 ExecuteScalar各有何不同。

ExecuteReader: 執行此方法會傳回DataReader,以取得資料來源的順向資料流。

ExecuteNonQuery: 執行SQL敘述時使用,不會傳回資料記錄。

ExecuteScalar:
如果要執行的SQL敘述是用來回傳計算過的單一值,或者回傳的是只有一筆資料列、一個資料行的資料(不是要傳回一整筆記錄的情形),則可以使用ExecuteScalar方法,以達最佳執行效能。

三、請為下列程式碼片斷填上註解:

1. AddHandler CategoriesBindingSource.CurrentChanged, AddressOf CrtChanged

增加一個處理器,讓CategoriesBindingSource物件的CurrentChanged事件被觸發時,會呼叫我們自訂的CrtChanged方法。

2. Private strConn As String = "Data Source=MAIN-HOME;Initial Catalog=Northwind;Integrated Security=True"

DataSource=IP位置或電腦名稱;Initial
Catalog=資料庫名稱;Integrated Security=True為符合Windows驗證的Integrated Security語法。

3. Dim strSQL As String = "Insert Into Members (UserName, Password) Values (@UserName, @Password)"

宣告strSQL為SQL敘述字串,內容為新增一筆記錄至Members資料表,其中UserName及Password欄位值為參數形式。

4. Dim p1 As SqlParameter = New SqlParameter("@Password", SqlDbType.NVarChar, 40)
    p1.Direction = ParameterDirection.Input
    p1.Value = FormsAuthentication.HashPasswordForStoringInConfigFile(Text1.Text,
"sha1")

定義p1為SqlParameter物件(參數物件),作為參數@Password的物件,並指定其型態為NVarChar,長度為40位元。另外也指明p1的Direction為輸入式的參數,最後使用sha1雜湊加密演算法,將Text1.Text的內容加密後放進p1.Value

5. Dim p2 As SqlParameter = New SqlParameter("@MemberID", SqlDbType.Int)

    p2.Direction = ParameterDirection.Output

定義p2為SqlParameter物件(參數物件),作為參數@MemberID的物件,並指定其型態為Int。另外也指明p2的Direction為回傳式參數,表示此參數可取得回傳值。

6. Select @MemberID = SCOPE_IDENTITY()

為T-SQL語法,在預存程序中加入此行可在新增記錄時,取得自動新增欄位最新的MemberID值。


標籤:

分類:

本文作者是Audi Lu

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

*

*

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料