SqlDataSource支持更新_第1頁(yè)
SqlDataSource支持更新_第2頁(yè)
SqlDataSource支持更新_第3頁(yè)
SqlDataSource支持更新_第4頁(yè)
SqlDataSource支持更新_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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)介

1、SqlDataSource支持更新操作 一定要記得更新sqldatasource!1 C#除非指定UpdateCommand,否則數(shù)據(jù)源SqlDataSource不支持更新操作。更新完數(shù)據(jù)庫(kù)一定要記得更新sqldatasource!雖然不是什么大錯(cuò),但是改了,頁(yè)面才會(huì)百分百不出錯(cuò),看著也舒服些么! 下面就是更新它的一個(gè)簡(jiǎn)單舉例:SqlDataSource1.UpdateCommand = UPDATE PlayList SET PlayTime=+time2+, PlayBorder=+border+;2來(lái)看看原因吧:SqlDataSource控件 SqlDataSource控件是一個(gè)數(shù)據(jù)源控

2、件,代表與一個(gè)關(guān)系型數(shù)據(jù)存儲(chǔ)(諸如SQL Server或Oracle或任何一個(gè)可以通過(guò)OLE DB或ODBC橋梁訪問(wèn)的數(shù)據(jù)源)的連接。3 我們使用兩個(gè)主要屬性建立數(shù)據(jù)存儲(chǔ)的連接: ConnectionString和ProviderName。前一個(gè)屬性表示連接字符串,包含了打開(kāi)與底層引擎會(huì)話所需的足夠信息。后一個(gè)屬性規(guī)定此操作使用的ADO.NET托管提供程序的命名空間。ProviderName屬性默認(rèn)為System.Data.SqlClient,這表示默認(rèn)的數(shù)據(jù)存儲(chǔ)是SQL Server。例如,要瞄準(zhǔn)一個(gè)OLE DB提供程序,則使用System.Data.OleDb字符串。4 該控件既可以使用數(shù)

3、據(jù)適配器也可以使用命令對(duì)象檢索數(shù)據(jù)。根據(jù)我們的選擇,獲取的數(shù)據(jù)將被封裝到一個(gè)DataSet對(duì)象或一個(gè)數(shù)據(jù)閱讀器中。如下代碼片斷說(shuō)明了激活一個(gè)綁定到一個(gè)SQL Server數(shù)據(jù)庫(kù)的SQL數(shù)據(jù)源控件所需的最少代碼: asp:SqlDataSource runat=server ID=MySqlSource ProviderName= ConnectionString= SelectCommand=SELECT * FROM employees /51. SqlDataSource控件的編程接口DeleteCommand, DeleteParameters,DeleteCommandType 獲得或

4、設(shè)置用來(lái)刪除底層數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)行的SQL語(yǔ)句、相關(guān)參數(shù)以及類型(文本或存儲(chǔ)過(guò)程)。FilterExpression, FilterParameters 獲得或設(shè)置用來(lái)創(chuàng)建使用Select命令獲取的數(shù)據(jù)之上的過(guò)濾器的字符串(和相關(guān)參數(shù))。只有當(dāng)控件通過(guò)DataSet管理數(shù)據(jù)時(shí)才起作用。6InsertCommand, InsertParameters,InsertCommandType 獲得或設(shè)置用來(lái)在底層數(shù)據(jù)存儲(chǔ)中插入新行的SQL語(yǔ)句、相關(guān)參數(shù)和類型(文本或存儲(chǔ)過(guò)程)。SelectCommand, SelectParameters,SelectCommandType 獲得或設(shè)置用來(lái)從底層數(shù)據(jù)存

5、儲(chǔ)中獲取數(shù)據(jù)的SQL語(yǔ)句、相關(guān)參數(shù)和類型(文本或存儲(chǔ)過(guò)程)。7SortParameterName 獲得或設(shè)置一個(gè)命令的存儲(chǔ)過(guò)程將用來(lái)存儲(chǔ)數(shù)據(jù)的一個(gè)輸入?yún)?shù)的名稱。(這種情況下的命令必須是存儲(chǔ)過(guò)程。)如果缺少該參數(shù),則會(huì)引起一個(gè)異常。UpdateCommand, UpdateParameters,UpdateCommandType 獲得或設(shè)置用來(lái)更新底層數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)行的SQL語(yǔ)句、相關(guān)參數(shù)和類型(文本或存儲(chǔ)過(guò)程)。8 每個(gè)命令屬性都是一個(gè)字符串,包含將要使用的SQL文本。命令可以有選擇地包含關(guān)聯(lián)參數(shù)集中列出的參數(shù)。托管提供程序及其底層的關(guān)系引擎決定SQL要使用的確切語(yǔ)法以及嵌入?yún)?shù)的語(yǔ)法。例

6、如,如果數(shù)據(jù)源控件指向SQL Server,則命令參數(shù)名必須以symbol為前綴。如果目標(biāo)數(shù)據(jù)源是一個(gè)OLE DB提供程序,則參數(shù)是無(wú)名的,用一個(gè)?占位符符號(hào)標(biāo)識(shí),并且按位置進(jìn)行定位。如下代碼片斷展示了一個(gè)更復(fù)雜的數(shù)據(jù)源控件,其中啟用了參數(shù)化刪除和更新命令:9asp:SqlDataSource runat=server ID=MySqlSource ConnectionString= SelectCommand=SELECT * FROM employees UpdateCommand=UPDATE employees SET lastname=lname DeleteCommand=DELE

7、TE FROM employees WHERE employeeid=TheEmp FilterExpression=employeeid 3 10 FilterExpression屬性適用的語(yǔ)法與DataView類的RowFilter屬性適用的語(yǔ)法相同,而后者又類似于SQL WHERE子句使用的語(yǔ)法。如果FilterExpression需要是參數(shù)化的,則可以通過(guò)FilterParameters集合指明參數(shù)。只有在DataSourceMode設(shè)置為DataSet時(shí)才能啟用過(guò)濾功能。 注意過(guò)濾器表達(dá)式和Select命令上的參數(shù)之間的區(qū)別。該命令上的參數(shù)影響數(shù)據(jù)存儲(chǔ)返回的結(jié)果集;而過(guò)濾器表達(dá)式限制

8、通過(guò)Select命令返回的結(jié)果集的顯示內(nèi)容。11SqlDataSource類的其他屬性CancelSelectOnNullParameter 指示如果一個(gè)參數(shù)等于null是否撤銷數(shù)據(jù)檢索操作。默認(rèn)值為true。ConflictDetection 決定該控件在一次刪除或更新操作期間應(yīng)如何處理數(shù)據(jù)沖突。在默認(rèn)情況下,同時(shí)發(fā)生的變更被覆蓋。ConnectionString 連接到數(shù)據(jù)庫(kù)的連接字符串。DataSourceMode 指示應(yīng)如何返回?cái)?shù)據(jù):通過(guò)DataSet還是通過(guò)數(shù)據(jù)閱讀器。12OldValuesParameterFormatString 獲得或設(shè)置一個(gè)格式字符串,該格式字符串應(yīng)用于傳遞給

9、Delete或Update方法的任何參數(shù)的名稱。ProviderName 指示將要使用的ADO.NET托管提供程序的命名空間。 有趣的是,這些屬性中有很多映射了實(shí)際視圖類上定義的相同屬性。13 SqlDataSource對(duì)象有幾個(gè)方法和事件,在大多數(shù)情況下所有的數(shù)據(jù)源組件都有這些方法和事件。其中方法包括Delete, Insert, Select和Update,并且它們是作為底層數(shù)據(jù)源視圖類的對(duì)應(yīng)方法的惟一封裝器實(shí)現(xiàn)的。這些事件成對(duì)存在:Deleting/Deleted、Inserting/Inserted、Selecting/Selected和Updating/Updated,并且在上述方法

10、之前和之后激發(fā)。過(guò)濾操作的開(kāi)始通過(guò)Filtering事件發(fā)出信號(hào)。14 如前所述,ASP.NET 2.0特有的控件是惟一真正地利用數(shù)據(jù)源控件的能力的控件。因而,后面兩章專門介紹GridView, DetailsView和FormView控件,到時(shí)將會(huì)看到大量示例代碼,它們說(shuō)明了如何使用SqlDataSource控件進(jìn)行選擇、更新、分頁(yè)和排序。在本章中,我們將花更多的時(shí)間來(lái)討論該控件的其他特征,這些特征特別適合在實(shí)際應(yīng)用中使用。15聲明性參數(shù) 每個(gè)命令屬性都有自己的參數(shù)集ParameterCollection集合類的一個(gè)實(shí)例。ASP.NET 2.0支持不少參數(shù)類型。ControlParamete

11、r 從一個(gè)服務(wù)器控件的任何公共屬性獲得該參數(shù)值。CookieParameter 根據(jù)指定的HTTP cookie的內(nèi)容設(shè)置參數(shù)值。FormParameter 從HTTP請(qǐng)求窗體的指定輸入字段中獲取該參數(shù)值。Parameter 獲取由代碼分配的參數(shù)值。16Pro 從根據(jù)應(yīng)用程序的個(gè)性化機(jī)制創(chuàng)建的配置文件對(duì)象中的指定屬性獲取該參數(shù)值。QueryStringParameter 從請(qǐng)求查詢字符串中的指定變量獲取該參數(shù)值。SessionParameter 根據(jù)指定的會(huì)話狀態(tài)槽的內(nèi)容設(shè)置該參數(shù)值。17 每個(gè)參數(shù)類都有一個(gè)Name屬性以及它的作用和實(shí)現(xiàn)特有的屬性集。為了理解數(shù)據(jù)源控件中的聲明性參數(shù),讓我們看

12、看如下代碼:asp:SqlDataSource runat=server ID=MySource ConnectionString= SelectCommand=SELECT * FROM employees WHERE employeeid MinID 18 該查詢包含一個(gè)名為MinID的占位符。該數(shù)據(jù)源控件用ControlParameter對(duì)象返回的信息自動(dòng)地填充該占位符??丶?shù)的值由給定控件上的給定屬性所決定。PropertyName屬性規(guī)定了該屬性的名稱;而該控件的ID在ControlId屬性中。為了使前面的代碼起作用,頁(yè)面開(kāi)發(fā)人員必須保證該頁(yè)面包含一個(gè)具有給定的ID和屬性的控件;否

13、則,拋出一個(gè)異常。在本例中,EmpID控件上的Text屬性的值被用作匹配參數(shù)的值。19 形參(命令文本中的占位符)和實(shí)際值之間的綁定,取決于底層的托管提供程序如何處理和辨認(rèn)參數(shù)。如果提供程序類型支持有名的參數(shù)(象SQL Server和Oracle那樣),則這種綁定涉及將占位符的名稱與參數(shù)的名稱進(jìn)行匹配。否則,這種匹配是基于位置的。因此,第1個(gè)占位符綁定到第1個(gè)參數(shù),以此類推。這就是使用OLE DB訪問(wèn)數(shù)據(jù)時(shí)發(fā)生的情況。20沖突檢測(cè) SqlDataSource控件能夠以兩種方法之一有選擇地執(zhí)行數(shù)據(jù)庫(kù)侵入的操作(刪除和更新)。數(shù)據(jù)源控件與數(shù)據(jù)綁定控件相聯(lián)系,因此,同時(shí)讀取數(shù)據(jù),也許還要在客戶端進(jìn)行

14、修改,然后進(jìn)行更新,這種思想并不是牽強(qiáng)的。在多個(gè)用戶擁有對(duì)數(shù)據(jù)庫(kù)的讀/寫訪問(wèn)的情況下,如果他們企圖操作的記錄同時(shí)被修改了,則更新/刪除方法的行為應(yīng)怎樣呢?21 SqlDataSource控件使用ConflictDetection屬性確定在執(zhí)行更新和刪除操作時(shí)要做什么。該屬性被聲明為ConflictOptions枚舉類型;其默認(rèn)值是OverwriteChanges,這就是說(shuō),無(wú)論該行中的值自上一次被讀取以來(lái)有沒(méi)有發(fā)生變化,任何侵入操作都會(huì)發(fā)生變化。另一個(gè)值是CompareAllValues,它只是確保SqlDataSource控件將從數(shù)據(jù)庫(kù)讀取得原始數(shù)據(jù),傳給底層視圖類的Delete或Updat

15、e方法。22 除非這樣編寫刪除或更新語(yǔ)句,即如果該行中的數(shù)據(jù)不匹配最初讀取的數(shù)據(jù),則命令失敗,否則改變ConflictDetection的值不會(huì)產(chǎn)生任何顯著效果,注意到這一點(diǎn)是重要的。為做到這一點(diǎn),應(yīng)如下面這樣定義命令:UPDATE employees SET firstname=firstnameWHERE employeeid=employeeid AND firstname=original_firstname23 換句話說(shuō),我們必須顯式地向命令添加一個(gè)額外的子句,檢查正被修改的字段的當(dāng)前值是否仍然匹配最初讀取的值。這樣,多個(gè)用戶同時(shí)輸入的中間變更使WHERE子句失敗,從而使命令失敗。我

16、們自己負(fù)責(zé)調(diào)整命令文本;把ConflictDetection設(shè)置為CompareAllValues是不夠的。 如何格式化表示舊值的參數(shù)的名稱?SqlDataSource控件使用OldValuesParameterFormatString屬性格式化這些參數(shù)名。默認(rèn)值是original_0。24 如果使用CompareAllValues選項(xiàng),則可以處理數(shù)據(jù)源控件上的Deleted或Updated事件,以檢查多少行受到影響。如果該操作沒(méi)有影響任何記錄,則可能會(huì)發(fā)生并發(fā)違規(guī)(concurrency violation):void OnUpdated(object sender, SqlDataSour

17、ceStatusEventArgs e) if (e.AffectedRows = 0) . 25緩存行為 一個(gè)數(shù)據(jù)綁定控件與它的數(shù)據(jù)源組件之間的數(shù)據(jù)綁定是自動(dòng)完成的,并在由數(shù)據(jù)綁定控件引起的每次頁(yè)面回發(fā)時(shí)發(fā)生。假設(shè)一個(gè)頁(yè)面有網(wǎng)格、一個(gè)數(shù)據(jù)源控件和一個(gè)按鈕。如果以編輯模式打開(kāi)該網(wǎng)格,則Select命令運(yùn)行;如果單擊該按鈕(在數(shù)據(jù)綁定控件的邊界之外),則根據(jù)視圖狀態(tài)重建該網(wǎng)格的UI,并且不會(huì)運(yùn)行任何Select語(yǔ)句。 為了在每次回發(fā)時(shí)保存一個(gè)查詢,可以要求數(shù)據(jù)源控件緩存給定期間內(nèi)的結(jié)果集。在數(shù)據(jù)被緩存的時(shí)間里,Select方法從緩存(而不是底層數(shù)據(jù)庫(kù))中檢索數(shù)據(jù)。在該緩存期滿時(shí),Select方法

18、從底層數(shù)據(jù)檢索數(shù)據(jù),并新數(shù)據(jù)存回到緩存中。SqlDataSource的緩存行為由表9.13中的屬性所控制。26CacheDuration 指示數(shù)據(jù)應(yīng)當(dāng)在緩存中保留多久(以秒為單位)。CacheExpirationPolicy 指示緩存期限是絕對(duì)的還是可調(diào)整的。如果是絕對(duì)的,則在規(guī)定的秒數(shù)之后使緩存中的數(shù)據(jù)無(wú)效。如果是可調(diào)整的,則使那些在指定期限內(nèi)沒(méi)有用過(guò)的數(shù)據(jù)無(wú)效。CacheKeyDependency 指示用戶定義的緩存鍵的名稱,該緩存鍵鏈接到數(shù)據(jù)源控件創(chuàng)建的所有緩存項(xiàng)。通過(guò)終止該鍵,可以清楚該控件的緩存。EnableCaching 啟用或禁用緩存支持。27SqlCacheDependency 獲得或設(shè)置一個(gè)用分號(hào)分隔的字符串,指示哪些數(shù)據(jù)庫(kù)和表用于SQL Server緩存依賴。 SelectCommand、ConnectionString和SelectParameters的每種不同組合創(chuàng)建一個(gè)緩存項(xiàng)。如果多個(gè)SqlDataSource控件正好裝載相同數(shù)據(jù)庫(kù)中的相

溫馨提示

  • 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)論