使用 SqlDataSource 插入、更新和删除数据49
簡(jiǎn)介
正如在?數(shù)據(jù)插入、更新和刪除概述?中討論的那樣,GridView 控件提供內(nèi)置的更新和刪除功能,而DetailsView 和 FormView 控件則包含對(duì)插入、編輯和刪除功能的支持。這些數(shù)據(jù)修改功能無(wú)需編寫(xiě)任何代碼,可直接嵌入數(shù)據(jù)源控件。?數(shù)據(jù)插入、更新和刪除概述?中探討了如何使用 ObjectDataSource 通過(guò) GridView 、DetailsView 和 FormView 控件完成插入、更新和刪除功能。或者,可使用SqlDataSource 代替 ObjectDataSource 。
回想一下,要使 ObjectDataSource 支持插入、更新和刪除功能,我們需要指定完成插入、更新和刪除操作調(diào)用的目標(biāo)層方法。使用SqlDataSource ,我們需要提供要執(zhí)行的 INSERT 、UPDATE 、 和DELETE SQL 語(yǔ)句(或存儲(chǔ)過(guò)程)。正如我們將在本教程中所看到的,這些語(yǔ)句可手動(dòng)創(chuàng)建,也可以由 SqlDataSource 的 Configure Data Source 向?qū)ё詣?dòng)生成。
注意:由于我們已經(jīng)討論了 GridView 、DetailsView 和 FormView 控件的插入、編輯和刪除功能,本教程將更多的關(guān)注配置 SqlDataSource 控件來(lái)支持這些操作。如果您需要溫習(xí)在GridView 、DetailsView 和 FormView 內(nèi)的這些功能,請(qǐng)返回編輯、插入和刪除數(shù)據(jù)教程,首先從?數(shù)據(jù)插入、更新和刪除概述?開(kāi)始。
步驟1 :指定 INSERT 、UPDATE 和 DELETE 語(yǔ)句
正如我們?cè)谇懊鎯蓚€(gè)教程中所看到的,要想從SqlDataSource 控件檢索數(shù)據(jù),我們需要設(shè)置兩個(gè)屬性 :
對(duì)于帶參數(shù)的SelectCommand 值來(lái)說(shuō),參數(shù)值可通過(guò)SqlDataSource 的 SelectParameters 集合指定,可包含固定賦值、公用參數(shù)源值(查詢(xún)字符串字段、會(huì)話(huà)變量、Web 控件值等),或者通過(guò)編碼分配。調(diào)用 SqlDataSource 控件的 Select() 方法時(shí)(既可以通過(guò)編碼調(diào)用,也可以從 Web 數(shù)據(jù)控件自動(dòng)調(diào)用),將建立連接到數(shù)據(jù)庫(kù)的連接,將參數(shù)值分配給查詢(xún),并且將命令轉(zhuǎn)到數(shù)據(jù)庫(kù)。根據(jù)控件的DataSourceMode 屬性值,結(jié)果隨后可能作為 DataSet 返回,也可能作為 DataReader 返回。
SqlDataSource 控件不僅可以選擇數(shù)據(jù),還可以采用完全相同的方式,通過(guò)支持INSERT 、UPDATE 和 DELETE SQL 語(yǔ)句用于插入、更新和刪除數(shù)據(jù)。只需分配要執(zhí)行的INSERT 、UPDATE 和 DELETE SQL 語(yǔ)句的?InsertCommand?、?UpdateCommand?和DeleteCommand?屬性。如果語(yǔ)句帶有參數(shù)(它們中大大多數(shù)均帶有參數(shù)),請(qǐng)將它們包含到?InsertParameters?、UpdateParameters?和?DeleteParameters?集合中。
一旦指定了InsertCommand 、UpdateCommand 或DeleteCommand 值,相應(yīng)的 Web 數(shù)據(jù) 控件的智能標(biāo)記中的 “Enable Inserting” 、“Enable Editing” 或者 “Enable Deleting” 將變?yōu)榭捎眠x項(xiàng)。為了說(shuō)明這一點(diǎn),我們需要從 Querying.aspx 頁(yè)面中舉一個(gè)在?使用 SqlDataSource 控件查詢(xún)數(shù)據(jù)?教程中創(chuàng)建的例子,并將其擴(kuò)充為包含刪除能力。
首先,從SqlDataSource 文件夾中打開(kāi) InsertUpdateDelete.aspx 頁(yè)面和Querying.aspx 頁(yè)面。在 Querying.aspx 頁(yè)面的設(shè)計(jì)器上,從 第一個(gè)示例中選擇 SqlDataSource 和 GridView(ProductsDataSource 和 GridView1 控件)。選擇兩個(gè)控件之后,轉(zhuǎn)到 Edit 菜單,并選擇 Copy (或者按下 Ctrl+C )。接下來(lái),轉(zhuǎn)到InsertUpdateDelete.aspx 頁(yè)面上的設(shè)計(jì)器,并粘貼到控件中。在將兩個(gè)控件移動(dòng)到InsertUpdateDelete.aspx 之后,請(qǐng)?jiān)跒g覽器中測(cè)試頁(yè)面。將在 Products 數(shù)據(jù)庫(kù)表中看到所有記錄的 ProductID 、 ProductName 和 UnitPrice 值。
圖1 :按 ProductID 的順序列出所有產(chǎn)品
添加 SqlDataSource 的DeleteCommand 和DeleteParameters 屬性
此時(shí),我們已經(jīng)獲得了從Products表返回所有記錄的SqlDataSource ,以及顯示此數(shù)據(jù)的 GridView 。我們的目標(biāo)是將此示例擴(kuò)展為用戶(hù)可以通過(guò) GridView 刪除產(chǎn)品。要完成此目標(biāo),我們需要指定SqlDataSource 控件的 DeleteCommand 和DeleteParameters 屬性值,然后將GridView 配置為支持刪除。
DeleteCommand 和 DeleteParameters 屬性可通過(guò)多種方式指定:
- 通過(guò)聲明式語(yǔ)法指定
- 從設(shè)計(jì)器中的 Properties 窗口指定
- 從Configure Data Source 向?qū)У摹癝pecify a custom SQL statement or stored procedure" 屏幕指定
- 從Configure Data Source 向?qū)У摹癝pecify columns from a table of view” 屏幕中的Advanced 按鈕來(lái)指定,實(shí)際上,它將自動(dòng)生成DeleteCommand 和 DeleteParameters 屬性中使用的 DELETE SQL 語(yǔ)句和參數(shù)集
下面,我們將探討如何在步驟2 中自動(dòng)創(chuàng)建 DELETE 語(yǔ)句?,F(xiàn)在,盡管 Configure Data Source 向?qū)Щ蛘呗暶魇秸Z(yǔ)法選項(xiàng)均可工作,但我們將在設(shè)計(jì)器中使用 Properties 窗口。
在InsertUpdateDelete.aspx 頁(yè)面中的設(shè)計(jì)器中,單擊 ProductsDataSource SqlDataSource ,隨后屏幕上將顯示 Properties 窗口(從 View 菜單選擇Properties 窗口,或者單擊F4 )。選擇 DeleteQuery 屬性,屏幕上將顯示省略號(hào)。
圖2 :從 Properties 窗口選擇 DeleteQuery 屬性
注意:SqlDataSource 沒(méi)有 DeleteQuery 屬性。并且,DeleteQuery 是 DeleteCommand 和 DeleteParameters 屬性的組合,僅在使用 設(shè)計(jì)器 查看窗口Properties 窗口時(shí)才被列出。如果您的 Source 視圖中查看 Properties 窗口,您會(huì)看到 DeleteCommand 屬性。
DeleteQuery 屬性中單擊省略號(hào),屏幕將顯示Command and Parameter Editor 對(duì)話(huà)框(見(jiàn)圖 3)。在此對(duì)話(huà)框中,您可以指定DELETE SQL 語(yǔ)句和參數(shù)。在DELETE 命令文本框中輸入下列查詢(xún)(既可以手動(dòng)輸入,也可以使用Query Builder 輸入,如果您愿意的話(huà))。
DELETE FROM Products WHERE ProductID = @ProductID
接下來(lái),單擊 Refresh Parameters 按鈕,向下面的參數(shù)列表中添加 @ProductID 參數(shù)。
圖3 :從 Properties 窗口選擇 DeleteQuery 屬性
請(qǐng)不要為此參數(shù)賦值(保留其參數(shù)源為 “None” )。一旦我們給 GridView 提供了刪除支持,GridView 將自動(dòng)支持此參數(shù)值,單擊 Delete 按鈕的行將使用其 DataKeys 集合的值。
注意:DELETE 查詢(xún)中使用的參數(shù)名稱(chēng)必須與 GridView 、DetailsView 或者FormView 中的 DataKeyNames 值的名稱(chēng)一致。也就是說(shuō),DELETE 語(yǔ)句中的參數(shù)是特意命名為 @ProductID (而不是 @ID),因?yàn)?Products 表中關(guān)鍵字列名稱(chēng)(所以,GridView 中的 DataKeyNames 值)為 ProductID 。
如果參數(shù)名稱(chēng)和 DataKeyNames 值不匹配,GridView 將無(wú)法從 DataKeys 連接自動(dòng)分配參數(shù)值。
在 Command and Parameter Editor 對(duì)話(huà)框中輸入刪除相關(guān)的信息之后,單擊OK ,轉(zhuǎn)到Source 視圖,查看結(jié)果的聲明標(biāo)記:
<asp:SqlDataSource?ID="ProductsDataSource"?runat="server"?????ConnectionString="<%$?ConnectionStrings:NORTHWNDConnectionString?%>"?
????SelectCommand=?
????????"SELECT?[ProductID],?[ProductName],?[UnitPrice]?FROM?[Products]"?
????DeleteCommand="DELETE?FROM?Products?WHERE?ProductID?=?@ProductID">?
????<DeleteParameters>?
????????<asp:Parameter?Name="ProductID"?/>?
????</DeleteParameters>?
</asp:SqlDataSource>
請(qǐng)注意添加DeleteCommand 屬性、<DeleteParameters> 部分和名為productID 的參數(shù)對(duì)象。
配置 GridView 啟用刪除
添加DeleteCommand 屬性之后,GridView 的智能標(biāo)記將包含 “Enable Deleting” 選項(xiàng)。繼續(xù)執(zhí)行,并選中此復(fù)選框。正如在插入、更新和刪除概述?中討論的一樣,這將使GridView 添加一個(gè)CommandField ,其 ShowDeleteButton 屬性被設(shè)置為 True 。如圖 4 所示,當(dāng)頁(yè)面通過(guò)瀏覽器訪(fǎng)問(wèn)時(shí),頁(yè)面上將包含一個(gè) Delete 按鈕。可以通過(guò)刪除某些產(chǎn)品來(lái)測(cè)試此頁(yè)面。
圖4 :每個(gè)GridView 行均包含一個(gè)Delete 按鈕
單擊Delete 按鈕時(shí)出現(xiàn)回傳,GridView 為每個(gè)單擊 Delete 按鈕行的 ProductID 參數(shù)賦值為 DataKeys 集的值,并調(diào)用 SqlDataSource 的 Delete() 方法。然后,SqlDataSource 控件將連接到數(shù)據(jù)庫(kù),并執(zhí)行DELETE 語(yǔ)句。這樣,GridView 將重新綁定到 SqlDataSource ,恢復(fù)并顯示當(dāng)前產(chǎn)品(這些產(chǎn)品現(xiàn)在不再包含剛剛刪除的記錄)。
注意:由于 GridView 使用其 DataKeys 集合為SqlDataSource 參數(shù)賦值,因此 GridView 的 DataKeyNames 屬性可設(shè)置為組成主鍵的列并且 SqlDataSource 的 SelectCommand 返回這些列就變得至關(guān)重要。此外,SqlDataSource 的 DeleteCommand 中的參數(shù)名設(shè)置為 @ProductID 也十分重要。如果未設(shè)置 DataKeyNames 屬性,或者參數(shù)未命名為 @ProductsID ,單擊 Delete 按鈕將導(dǎo)致回傳,但實(shí)際上不會(huì)刪除任何記錄。
圖5 以圖形方式說(shuō)明了此過(guò)程。有關(guān)在 Web 數(shù)據(jù)控件中與插入、更新和刪除相關(guān)的事件鏈的更詳細(xì)討論,請(qǐng)參照?探討與插入、更新、刪除相關(guān)的事件?教程。
圖5 : 在 GridView 中單擊 Delete 按鈕將調(diào)用 SqlDataSource 的 Delete() 方法
步驟2 :自動(dòng)生成 INSERT 、UPDATE 和 DELETE 語(yǔ)句
正如步驟1 中所討論的,INSERT 、UPDATE 和 DELETE SQL 語(yǔ)句可通過(guò)Properties 窗口或者控件的聲明式語(yǔ)法指定。但是,此方法要求我們手動(dòng)編寫(xiě) SQL 語(yǔ)句,這些語(yǔ)句可能十分單調(diào),并且容易產(chǎn)生錯(cuò)誤。幸運(yùn)的是 ,Configure Data Source 向?qū)峁┝艘粋€(gè)選項(xiàng) , 使用 “ Specify columns from a table of view” 屏幕時(shí)可自動(dòng)生成 INSERT 、UPDATE 和 DELETE 語(yǔ)句。
下面,我們探討一下這個(gè)自動(dòng)生成選項(xiàng)。在InsertUpdateDelete.aspx 中向 設(shè)計(jì)器 添加一個(gè) DetailsView ,并將其 ID 屬性設(shè)置為 ManageProducts 。接下來(lái),從 DetailsView 的智能標(biāo)記中選擇創(chuàng)建新數(shù)據(jù)源,并創(chuàng)建一個(gè)名為 ManageProductsDataSource 的 SqlDataSource 。
圖6 :創(chuàng)建一個(gè)名為 ManageProductsDataSource 的新 SqlDataSource
從Configure Data Source 向?qū)нx擇使用NORTHWINDConnectionString 連接字符串,單擊 Next 。從 “Configure the Select Statement” 屏幕,保留 “Specify columns from a table or view” 單選按鈕選中不變,并從下拉列表選擇 Products 表。從復(fù)選框列表選擇 ProductID 、 ProductName 、 UnitPrice 和 Discontinued 列。
圖7 :使用 Products 表,返回 ProductID 、ProductName 、UnitPrice 和 Discontinued 列
要根據(jù)所選的表和列自動(dòng)生成 INSERT 、UPDATE 和 DELETE 語(yǔ)句,單擊Advanced 按鈕,選中 “Generate INSERT, UPDATE, and DELETE statements” 復(fù)選框。
圖8 :選中 “Generate INSERT, UPDATE, and DELETE statements” 復(fù)選框
只有在所選的表有主鍵并且主鍵列包含在返回列的列表中時(shí),“Generate INSERT, UPDATE, and DELETE statements” 復(fù)選框才可被選中。在選中 “ Generate INSERT, UPDATE, and DELETE statements” 復(fù)選框的情況下,“ Use optimistic concurrency” 復(fù)選框?qū)⒆鳛榻Y(jié)果產(chǎn)生的 UPDATE 和 DELETE 語(yǔ)句中增加 WHERE 子句,提供開(kāi)放式并發(fā)控件。現(xiàn)在,不選中此復(fù)選框;我們將在下一篇教程中探討使用 SqlDataSource 控件完成開(kāi)放式并發(fā)。
在選中“Generate INSERT, UPDATE, and DELETE statements” 復(fù)選框之后,單擊OK 返回 “Configure Select Statement” 屏幕,然后單擊 Next ,最后單擊 Finish ,完成 Configure Data Source 向?qū)АM瓿上驅(qū)Ш?#xff0c;Visual Studio 將為 ProductID 、ProductName 和 UnitPrice 向 DetailsView 添加BoundFields ,還將為 Discontinued 列添加CheckBoxField 。為了使正在訪(fǎng)問(wèn)此頁(yè)面的用戶(hù)能夠查看產(chǎn)品,請(qǐng)從DetailsView 的智能標(biāo)記選擇 “Enable Paging” 選項(xiàng)。同時(shí),清除DetailsView 的 Width 和 Height 屬性。
請(qǐng)注意,智能標(biāo)記還提供了 “Enable Inserting” 、“Enable Editing” 和 “Enable Deleting” 選項(xiàng)。這是由于 SqlDataSource 控件包含其 InsertCommand 、UpdateCommand 和 DeleteCommand 值,如下列聲明式語(yǔ)法所示:
<asp:DetailsView?ID="ManageProducts"?runat="server"?AllowPaging="True"?????AutoGenerateRows="False"?DataKeyNames="ProductID"?
????DataSourceID="ManageProductsDataSource"?EnableViewState="False">?
????<Fields>?
????????<asp:BoundField?DataField="ProductID"?HeaderText="ProductID"?
????????????InsertVisible="False"?ReadOnly="True"?SortExpression="ProductID"?/>?
????????<asp:BoundField?DataField="ProductName"?HeaderText="ProductName"?
????????????SortExpression="ProductName"?/>?
????????<asp:BoundField?DataField="UnitPrice"?HeaderText="UnitPrice"?
????????????SortExpression="UnitPrice"?/>?
????????<asp:CheckBoxField?DataField="Discontinued"?HeaderText="Discontinued"?
????????????SortExpression="Discontinued"?/>?
????</Fields>?
</asp:DetailsView>?
?
<asp:SqlDataSource?ID="ManageProductsDataSource"?runat="server"?
????ConnectionString="<%$?ConnectionStrings:NORTHWNDConnectionString?%>"?
????DeleteCommand=?
????????"DELETE?FROM?[Products]?WHERE?[ProductID]?=?@ProductID"?
????InsertCommand=?
????????"INSERT?INTO?[Products]?([ProductName],?[UnitPrice],?[Discontinued])?
?????????VALUES?(@ProductName,?@UnitPrice,?@Discontinued)"?
????SelectCommand=?
????????"SELECT?[ProductID],?[ProductName],?[UnitPrice],?[Discontinued]?
?????????FROM?[Products]"?
????UpdateCommand=?
????????"UPDATE?[Products]?SET?[ProductName]?=?@ProductName,?
?????????[UnitPrice]?=?@UnitPrice,?[Discontinued]?=?@Discontinued?
?????????WHERE?[ProductID]?=?@ProductID">?
????<DeleteParameters>?
????????<asp:Parameter?Name="ProductID"?Type="Int32"?/>?
????</DeleteParameters>?
????<UpdateParameters>?
????????<asp:Parameter?Name="ProductName"?Type="String"?/>?
????????<asp:Parameter?Name="UnitPrice"?Type="Decimal"?/>?
????????<asp:Parameter?Name="Discontinued"?Type="Boolean"?/>?
????????<asp:Parameter?Name="ProductID"?Type="Int32"?/>?
????</UpdateParameters>?
????<InsertParameters>?
????????<asp:Parameter?Name="ProductName"?Type="String"?/>?
????????<asp:Parameter?Name="UnitPrice"?Type="Decimal"?/>?
????????<asp:Parameter?Name="Discontinued"?Type="Boolean"?/>?
????</InsertParameters>?
</asp:SqlDataSource>
請(qǐng)注意SqlDataSource 控件如何自動(dòng)設(shè)置其InsertCommand 、UpdateCommand 和? DeleteCommand 屬性值。InsertCommand 和 UpdateCommand 屬性中引用的列是由SELECT 語(yǔ)句中的列決定的。也就是說(shuō),InsertCommand 和UpdateCommand 只含有那些SelectCommand 中指定的列,并不是每個(gè)Products 列均在InsertCommand 和UpdateCommand 中(由于它是?編輯時(shí)無(wú)法更改它的值,插入時(shí)自動(dòng)分配,將忽略較小的 ProductID )。此外,對(duì)于InsertCommand、UpdateCommand 和DeleteCommand 屬性中的每個(gè)參數(shù)來(lái)說(shuō),InsertParameters 、UpdateParameters 和 DeleteParameters 集合中有相應(yīng)的參數(shù)。
要啟用DetailsView 的數(shù)據(jù)修改功能,請(qǐng)?jiān)谄渲悄軜?biāo)記中選中 “Enable Inserting” 、“ Enable Editing” 和 “Enable Deleting” 選項(xiàng)。這將添加一個(gè) CommandField ,其ShowInsertButton 、ShowEditButton 和ShowDeleteButton 屬性均被設(shè)置為 True 。
在瀏覽器中訪(fǎng)問(wèn)頁(yè)面,請(qǐng)注意DetailsView 中包含的 Edit 、Delete 和 New 按鈕。單擊 Edit 按鈕,DetailsView 將切換到編輯模式,該模式將所有ReadOnly 屬性被設(shè)置為False(默認(rèn)值)的 BoundField 顯示為一個(gè)文本框,而 CheckBoxField 則顯示為復(fù)選框。
圖9 :DetailsView 的默認(rèn)編輯界面
與此類(lèi)似,您可以刪除當(dāng)前選擇的產(chǎn)品,或者向系統(tǒng)添加一個(gè)新產(chǎn)品。由于 InsertCommand 語(yǔ)句處理 ProductName 、UnitPrice 和 Discontinued 列,其它列在插入時(shí)要么由數(shù)據(jù)庫(kù)分配 NULL 值,要么分配它們的默認(rèn)值。就像 ObjectDataSource 一樣,如果 InsertCommand 丟失了任何不允許使用NULL 值或者沒(méi)有默認(rèn)值的數(shù)據(jù)庫(kù)列表行,嘗試執(zhí)行 INSERT 語(yǔ)句時(shí)將出現(xiàn)一個(gè) SQL 錯(cuò)誤。
注意:DetailsView 的插入和編輯界面缺少某種定制或驗(yàn)證。要添加validation 控件或定制界面,您需要將BoundFields 轉(zhuǎn)換為T(mén)emplateFields 。更多信息 , 請(qǐng)參閱?為編輯與插入界面添加驗(yàn)證控件和?自定義數(shù)據(jù)修改界面教程。
此外,請(qǐng)記住對(duì)于更新和刪除來(lái)說(shuō),DetailsView 使用當(dāng)前產(chǎn)品的 DataKey 值,此值僅在 DataKeyNames 已經(jīng)配置完畢的情況下呈現(xiàn)。如果編輯和刪除看上去似乎沒(méi)有效果,請(qǐng)確定是否設(shè)置了DataKeyName 屬性。
自動(dòng)生成 SQL 語(yǔ)句的限制
由于“Generate INSERT, UPDATE, and DELETE statements” 僅在從表中選擇列時(shí)可用,對(duì)于更復(fù)雜的查詢(xún)來(lái)說(shuō),您必須像步驟1 一樣編寫(xiě)您自己的INSERT 、UPDATE 和 DELETE 語(yǔ)句。通常情況下,為了實(shí)現(xiàn)顯示的目的,SQL SELECT 語(yǔ)句使用 JOIN 從一個(gè)或者更多個(gè)查找表中取回?cái)?shù)據(jù)(例如,在顯示產(chǎn)品信息時(shí)取回 Categories 表的 CategoryName 字段)。同時(shí),我們可能想讓用戶(hù)可以編輯、更新或插入數(shù)據(jù)到“核心”表(此時(shí)是 Products 表)。
由于INSERT 、UPDATE 和 DELETE 語(yǔ)句可手動(dòng)輸入,請(qǐng)考慮下列節(jié)省時(shí)間的技巧。首先,安裝SqlDataSource ,保證它可以從 Products 表撤回?cái)?shù)據(jù)。請(qǐng)使用 Configure Data Source 向?qū)У?“ Specify columns from a table or view” 屏幕,保證可以自動(dòng)生成 INSERT 、UPDATE 和 DELETE 語(yǔ)句,然后,在完成向?qū)е?#xff0c;從Properties 窗口選擇配置SelectQuery (或者,返回 Configure Data Source 向?qū)?#xff0c;但是使用“Specify a custom SQL statement or stored procedure” 選項(xiàng)。)最后,更新 SELECT 語(yǔ)句,使之包含 JOIN 語(yǔ)法。此技術(shù)可以自動(dòng)生成 SQL 語(yǔ)句,可提供更容易定制的 SELECT 語(yǔ)句,從而節(jié)省時(shí)間。
自動(dòng)生成INSERT 、UPDATE 和 DELETE 語(yǔ)句的另外一個(gè)限制是 INSERT 和 UPDATE 語(yǔ)句中的列是根據(jù) SELECT 語(yǔ)句返回的列確定的。我們可能需要更新或者插入更多或者更少的字段。例如,來(lái)自步驟2 的例子中,我們可能將 UnitPrice BoundField 設(shè)置為只讀。在這種情況下,它不應(yīng)該在UpdateCommand 中出現(xiàn)?;蛘?#xff0c;我們可能希望設(shè)置 GridView 中不出現(xiàn)的表字段。例如,添加新記錄時(shí),我們可能希望將 QuantityPerUnit 設(shè)置為“TODO” 。
如果需要這樣的定制,您需要手動(dòng)完成,要么通過(guò)Properties 窗口、向?qū)е械?“Specify a custom SQL statement or stored procedure” 選項(xiàng)完成,要么通過(guò)聲明式語(yǔ)法完成。
注意:在 Web 數(shù)據(jù)控件中添加不含有相應(yīng)字段的參數(shù)時(shí),請(qǐng)記住這些參數(shù)值在某些方面需要分配值。分配的值可以為:InsertCommand 或 UpdateCommand 中的直接賦值;可從某些預(yù)定義源獲得(查詢(xún)字符串 、會(huì)話(huà)變量、頁(yè)面上的 Web? 控件等);或者可通過(guò)編碼賦值,正如我們?cè)谇懊娴慕坛讨锌吹降囊粯印?/p>
小結(jié)
為了使Web 數(shù)據(jù)控件能夠使用它們內(nèi)置的插入、編輯和刪除功能,它們綁定的數(shù)據(jù)源控件必須提供這樣的功能。對(duì)SqlDataSource 來(lái)說(shuō),這意味著INSERT 、UPDATE 和 DELETE SQL 語(yǔ)句必須分配給 InsertCommand 、UpdateCommand 和 DeleteCommand 屬性。這些屬性及其相應(yīng)的參數(shù)集可以手動(dòng)添加,或者通過(guò)Configure Data Source 向?qū)ё詣?dòng)生成。在本教程中,我們對(duì)上述兩種方法均進(jìn)行了討論。
在?實(shí)現(xiàn)開(kāi)放式并發(fā)?教程中,我們探討了通過(guò) ObjectDataSource 使用開(kāi)放式并發(fā)。SqlDataSource 控件也可提供開(kāi)放式并發(fā)支持。如步驟2 所述,自動(dòng)生成 INSERT 、UPDATE 和 DELETE 語(yǔ)句時(shí),向?qū)⑻峁?“ Use optimistic concurrency” 選項(xiàng)。正如下一篇教程中我們將看到的,通過(guò) SqlDataSource 使用開(kāi)放式并發(fā)在 UPDATE 和 DELETE 語(yǔ)句中將修改 WHERE 子句,保證頁(yè)面上次顯示數(shù)據(jù)之后其它列的值均未發(fā)生變化。
快樂(lè)編程!
轉(zhuǎn)載于:https://www.cnblogs.com/uddgm/articles/5451539.html
總結(jié)
以上是生活随笔為你收集整理的使用 SqlDataSource 插入、更新和删除数据49的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 乌镇青石板桥是谁创建?
- 下一篇: 【转】phpize学习