《ASP NET程序設(shè)計(jì)案例教程》課件第5章_第1頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第5章_第2頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第5章_第3頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第5章_第4頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第5章_第5頁(yè)
已閱讀5頁(yè),還剩180頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章模塊4?——

商品信息管理5.1【任務(wù)10】商品信息查詢5.2【任務(wù)11】商品信息的添加、修改和刪除

【本章提要】

商品的查看、添加、刪除和修改操作是校園在線超市系統(tǒng)中的主要功能。本章通過介紹數(shù)據(jù)源控件SqlDataSource、數(shù)據(jù)綁定控件GridView、FormView和文件上傳控件FileUpLoad的使用,結(jié)合DataSet和DataAdapter對(duì)象,詳細(xì)介紹了商品信息管理各項(xiàng)功能的實(shí)現(xiàn)。

【學(xué)習(xí)目標(biāo)】

·掌握SqlDataSource控件。

·掌握GridView、FormView控件的使用。

·掌握文件上傳控件FileUpLoad。

·掌握DataSet對(duì)象和DataAdapter對(duì)象的使用。

任務(wù)描述

任何用戶在訪問電子商務(wù)類的網(wǎng)站時(shí),通常會(huì)對(duì)感興趣的商品進(jìn)行查找。因此在校園在線超市中,進(jìn)行商品信息查詢是非常必要的。查詢時(shí),應(yīng)能根據(jù)商品名稱、商品類型等信息進(jìn)行查詢。5.1【任務(wù)10】商品信息查詢

必備知識(shí)

知識(shí)1SqlDataSource控件

1.SqlDataSource控件

在ASP.NET2.0中,數(shù)據(jù)訪問系統(tǒng)的核心是數(shù)據(jù)源控件。一個(gè)數(shù)據(jù)源控件代表數(shù)據(jù)(數(shù)據(jù)庫(kù)、對(duì)象、XML、消息隊(duì)列等)在系統(tǒng)內(nèi)存中的映像,能夠在Web頁(yè)面上通過數(shù)據(jù)綁定控件展示出來。為了適應(yīng)對(duì)不同數(shù)據(jù)源的訪問,ASP.NET2.0提供了五個(gè)內(nèi)置數(shù)據(jù)源控件:SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource。ASP.NET2.0新的數(shù)據(jù)源控件提供了新的聲明方式來處理數(shù)據(jù),使用這些控件,只需很少的代碼或無(wú)需任何代碼就可從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。本節(jié)以SqlDataSource控件為例,體驗(yàn)ASP.NET2.0強(qiáng)大的數(shù)據(jù)訪問能力。

SqlDataSource可用于任何具有關(guān)聯(lián)ADO.NET提供程序的數(shù)據(jù)庫(kù),包括MicrosoftSQLServer、OLEDB、ODBC和Oracle數(shù)據(jù)庫(kù)。在配置時(shí),SqlDataSource使用的SQL語(yǔ)法以及是否可使用更高級(jí)的數(shù)據(jù)庫(kù)功能均由所用的數(shù)據(jù)庫(kù)決定。數(shù)據(jù)源控件對(duì)于所有數(shù)據(jù)庫(kù)的操作都是相同的。

下面通過一個(gè)實(shí)例演示SqlDataSource控件實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問。

【例5-1】查詢商品類型表T_WareType中商品類別的名稱,并將查詢結(jié)果置于下拉列表控件DropDownList1中。

首先,新建名為Test.aspx的Web頁(yè),在設(shè)計(jì)視圖下雙擊數(shù)據(jù)分類項(xiàng)中的SqlDataSource控件就會(huì)添加一個(gè)SqlDataSource到當(dāng)前頁(yè)面。鼠標(biāo)單擊SqlDataSouce時(shí)會(huì)出現(xiàn)一個(gè)小三角箭頭(即“智能標(biāo)記”按鈕),如圖5-1所示。

圖5-1配置SqlDataSource數(shù)據(jù)源

SqlDataSource控件的HTML標(biāo)簽:

<asp:SqlDataSourceID="SqlDataSource1"runat="server">

</asp:SqlDataSource>

單擊配置數(shù)據(jù)源,出現(xiàn)如圖5-2所示的頁(yè)面。

圖5-2創(chuàng)建數(shù)據(jù)庫(kù)連接單擊新建連接,彈出如圖5-3所示的對(duì)話框,進(jìn)行數(shù)據(jù)源的配置。默認(rèn)情況下連接到SQLServer數(shù)據(jù)庫(kù),通過單擊“更改”可對(duì)Access數(shù)據(jù)庫(kù)文件、ODBC數(shù)據(jù)源、SQLServer數(shù)據(jù)庫(kù)、SQLServer手機(jī)版數(shù)據(jù)庫(kù)、SQLServer數(shù)據(jù)庫(kù)文件、Oracle數(shù)據(jù)庫(kù)文件等進(jìn)行配置。

圖5-3設(shè)置數(shù)據(jù)庫(kù)連接在圖5-3對(duì)話框中,設(shè)置服務(wù)器名及服務(wù)器登錄方式,并選擇要連接的數(shù)據(jù)庫(kù),如圖5-3所示。

值得注意的是,如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者的機(jī)器在同一個(gè)局域網(wǎng)里,可以使用局域網(wǎng)IP地址或者局域網(wǎng)中的電腦主機(jī)名;如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者的機(jī)器不在同一個(gè)局域網(wǎng)內(nèi),那么就要求數(shù)據(jù)庫(kù)服務(wù)器必須有一個(gè)公網(wǎng)IP;如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者所使用的機(jī)器是同一臺(tái)機(jī)器,則可以使用“(local)”、“.”或者“”來標(biāo)識(shí)。單擊“測(cè)試連接”按鈕,如果彈出連接成功的提示消息,就表示這個(gè)數(shù)據(jù)庫(kù)連接是可用的。單擊“確定”按鈕,回到“配置數(shù)據(jù)源”界面,這時(shí)點(diǎn)擊連接字符串旁邊的“+”按鈕就可以看到數(shù)據(jù)庫(kù)的連接字符串信息,如圖5-4所示。

圖5-4選擇數(shù)據(jù)庫(kù)連接單擊“下一步”按鈕,出現(xiàn)如圖5-5所示的頁(yè)面,可以將連接字符串保存到應(yīng)用程序配置文件(Web.Config)中,這樣,原來多數(shù)讀者為之苦惱的連接字符串就輕松地創(chuàng)建好了。

圖5-5保存數(shù)據(jù)連接字符串到Web.config接下來就要配置SQL語(yǔ)句了,讀者可以根據(jù)兩種方式從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù):一種是自定義SQL語(yǔ)句或存儲(chǔ)過程;另一種是指定來自表或視圖的列,如圖5-6所示。

圖5-6配置數(shù)據(jù)庫(kù)查詢這里,選擇查詢商品類別表T_WareType中的所有列,讀者也可以根據(jù)需求,對(duì)數(shù)據(jù)進(jìn)行篩選、排序等。單擊“下一步”按鈕,最后點(diǎn)擊“完成”按鈕。

通過上述步驟,完成了對(duì)SqlDataSource數(shù)據(jù)源的配置。那么,怎樣將配置好的數(shù)據(jù)源綁定到指定的數(shù)據(jù)控件呢?

在頁(yè)面中,添加一個(gè)DropDownList控件,單擊該控件右邊的“智能標(biāo)記”按鈕,單擊“選擇數(shù)據(jù)源”,出現(xiàn)如圖5-7所示的對(duì)話框。

圖5-7選擇數(shù)據(jù)源選擇數(shù)據(jù)源為“SqlDataSource1”;選擇要在DropDownList中顯示的數(shù)據(jù)字段為“splb_TypeName(商品類別名稱)”;為DropDownList的值選擇數(shù)據(jù)字段為“splb_TypeID”,單擊“確定”按鈕。

切換Test.aspx頁(yè)至源視圖,.NET生成的頁(yè)面代碼如下:

<asp:SqlDataSourceID="SqlDataSource1"runat="server"

ConnectionString="<%$ConnectionStrings:SuperMarketDBConnetionString%>"

SelectCommand="SELECT*FROM[T_WareType]">

</asp:SqlDataSource>

<asp:LabelID="Label1"runat="server"Text="商品類別:"></asp:Label>

<asp:DropDownListID="DropDownList1"runat="server"

DataSourceID="SqlDataSource1"

DataTextField="splb_TypeName"DataValueField="splb_TypeID">

</asp:DropDownList>

從頁(yè)面代碼可以知道,SqlDataSource控件的兩個(gè)重要屬性如下:①ConnectionString:設(shè)置為用于特定數(shù)據(jù)庫(kù)的連接字符串。為使Web應(yīng)用程序更易于維護(hù),并且安全性更高,通常將連接字符串存儲(chǔ)在應(yīng)用程序配置文件的connectionStrings元素中,如上述代碼所示。

②SelectCommand:指定該控件要執(zhí)行的SQL查詢。

在瀏覽器中查看Test.aspx頁(yè)面效果,如圖5-8所示。

圖5-8SqlDataSource數(shù)據(jù)源控件篩選數(shù)據(jù)從上例可以看出,通過SqlDataSource數(shù)據(jù)源控件,不用書寫一行代碼,就可完成對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的檢索,大大地提高了應(yīng)用程序的開發(fā)效率。

2.?dāng)?shù)據(jù)綁定控件

像DropDownList一樣,可以配置數(shù)據(jù)源的控件,稱為數(shù)據(jù)綁定控件。常用的數(shù)據(jù)綁定控件有DropDownList、ListBox、GridView、DataList、FormView、Repeater等。在ASP.NET2.0中,所有的數(shù)據(jù)庫(kù)綁定控件都是從BaseDataBoundControl這個(gè)抽象類派生的,它定義了幾個(gè)重要屬性和一個(gè)重要方法:

·DataSource屬性:指定數(shù)據(jù)綁定控件的數(shù)據(jù)來源,顯示的時(shí)候程序?qū)?huì)從這個(gè)數(shù)據(jù)源中獲取數(shù)據(jù)并顯示。

·DataSourceID屬性:指定數(shù)據(jù)綁定控件的數(shù)據(jù)源控件的ID,顯示的時(shí)候程序?qū)?huì)根據(jù)這個(gè)ID找到相應(yīng)的數(shù)據(jù)源控件,并利用這個(gè)數(shù)據(jù)源控件中指定方法獲取數(shù)據(jù)并顯示。

·DataBind()方法:當(dāng)指定了數(shù)據(jù)綁定控件的DataSource屬性或者DataSourceID屬性之后,再調(diào)用DataBind()方法才會(huì)顯示綁定的數(shù)據(jù)。

在使用數(shù)據(jù)源時(shí),會(huì)先嘗試使用DataSourceID屬性標(biāo)識(shí)的數(shù)據(jù)源,只在沒有設(shè)置DataSourceID時(shí)才會(huì)用到DataSource屬性標(biāo)識(shí)的數(shù)據(jù)源。也就是說,DataSource和DataSourceID兩個(gè)屬性不能同時(shí)使用。

知識(shí)2GridView控件

1.GridView控件概述

在使用ASP.NET開發(fā)Web應(yīng)用程序的過程中,GridView是一個(gè)非常重要的控件,幾乎任何與數(shù)據(jù)相關(guān)的顯示都要用到該控件。所以熟練掌握GridView控件的應(yīng)用技巧是每個(gè)Web開發(fā)人員所必備的基本能力。

GridView控件是ASP.NET1.1下DataGrid控件的替代品,它以表格的形式顯示數(shù)據(jù)源的值,每列表示一個(gè)字段,每行表示一條記錄。該控件提供了諸如內(nèi)置排序功能、內(nèi)置更新和刪除功能、內(nèi)置分頁(yè)功能、內(nèi)置行選擇功能、以編程方式訪問GridView對(duì)象模型、動(dòng)態(tài)設(shè)置屬性、處理事件等功能。同時(shí),它還可以通過主題和樣式自定義外觀,實(shí)現(xiàn)多種樣式的數(shù)據(jù)展示。表5-1列舉了GridView控件的常見屬性。本節(jié)我們將介紹GridView控件常用的應(yīng)用技巧。表5-1GridView控件常見屬性

2.格式化GridView

在軟件項(xiàng)目開發(fā)時(shí),功能的實(shí)現(xiàn)固然重要,但界面的呈現(xiàn)風(fēng)格也是不容忽視的,友好、和諧的界面風(fēng)格能為軟件增色不少。

有兩種方式可對(duì)GridView控件的樣式進(jìn)行調(diào)整。一種方式是通過“智能標(biāo)記”下的“自動(dòng)套用格式”菜單,這種方式簡(jiǎn)單、直觀,可以直接在窗口上看到最終格式化的效果,如圖5-9所示。設(shè)置步驟如下:

①添加SqlDataSource控件,并配置數(shù)據(jù)源。②添加GridView控件,單擊“智能標(biāo)記”菜單,選擇數(shù)據(jù)源為SqlDataSource1。單擊自動(dòng)套用格式對(duì)話框中的“選擇方案”列表中合適的樣式,可以通過“預(yù)覽”部分查看所選擇格式的效果。

圖5-9設(shè)置GridView控件另一種方式是通過設(shè)置GridView控件不同部分的樣式屬性來自定義該控件的外觀。這些樣式包括一些基本的樣式,如BackColor、BorderStyle等。

3.自定義列

如果需對(duì)Gridview控件中每一列自定義格式,則需單擊“智能標(biāo)記”中的“編輯列”,彈出如圖5-10所示的對(duì)話框,這樣就可以對(duì)每列進(jìn)行詳細(xì)的設(shè)置了。

圖5-10GridView控件中自定義列表5-2GridView控件中的列

·綁定列:用于顯示數(shù)據(jù)源中一列的信息。對(duì)于要顯示的每個(gè)數(shù)據(jù)列,通常都對(duì)應(yīng)于一個(gè)綁定列,需要顯示幾個(gè)字段,就加入幾個(gè)綁定列。使用綁定列還可以設(shè)置相關(guān)屬性。例如,列標(biāo)頭和列腳注的文本、字體、顏色、列寬、數(shù)據(jù)格式以及列是否為只讀(當(dāng)行編輯模式時(shí),它是否會(huì)顯示可編輯控件)等。當(dāng)字段數(shù)固定時(shí)可選用綁定列。添加綁定列界面如圖5-11所示。

圖5-11自定義列屬性設(shè)置添加綁定列后,其HTML標(biāo)簽代碼如下:

<asp:BoundFieldDataField="sp_WareID"HeaderText="商品編號(hào)"

InsertVisible="False"ReadOnly="True"SortExpression="sp_WareID"/>

·復(fù)選框列:用于顯示布爾型數(shù)據(jù)字段的值。由于復(fù)選框只能顯示選定的或未選定的狀態(tài),因此,復(fù)選框列只能綁定到具有布爾型數(shù)據(jù)類型的字段。通過設(shè)置DataField屬性完成列的綁定,還可通過設(shè)置Text屬性為復(fù)選框添加標(biāo)題。添加復(fù)選框列后,其列標(biāo)簽代碼如下:

<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="審核"

SortExpression="sp_Checked"/>

·超鏈接列:用于顯示各行中的鏈接。超鏈接的文本可以指定,也可以從數(shù)據(jù)列中導(dǎo)出鏈接文本。同樣,超鏈接的URL可以指定或者從數(shù)據(jù)源中獲取。例如,當(dāng)用GridView顯示商品列表時(shí),加超鏈接后,通過傳遞主鍵參數(shù),就可以在另外一個(gè)頁(yè)面上顯示商品的詳細(xì)信息。其HTML標(biāo)簽代碼如下:

<asp:HyperLinkFieldDataNavigateUrlFields="sp_WareID"

DataNavigateUrlFormatString="Details.aspx?spID={0}"

HeaderText="查看"Text="查看"/>

此超鏈接利用查詢字符串將sp_WareID的值傳遞到Details.aspx頁(yè)。

·圖像列:可以為所顯示的每個(gè)記錄顯示圖像。只需將圖像列綁定到包含圖像URL的數(shù)據(jù)源中的字段上,這可通過設(shè)置DataImageUrlField屬性完成??梢酝ㄟ^使用DataImageUrlFormatString屬性來設(shè)置URL值的格式。當(dāng)添加圖像列后,其對(duì)應(yīng)的HTML標(biāo)簽代碼如下:

<asp:ImageFieldDataImageUrlField="tp_ImagePath"HeaderText="商品圖片">

</asp:ImageField>

每個(gè)圖像還可以具有與之相關(guān)聯(lián)的備用文本,當(dāng)無(wú)法加載圖像或圖像不可用時(shí),將顯示此文本。

可以使用以下方法之一為所顯示的圖像指定備用文本:

①使用AlternateText屬性指定圖像的備用文本。

②使用DataAlternateTextField屬性可將數(shù)據(jù)源中的字段綁定到每個(gè)圖像的AlternateText屬性。這可用于為每個(gè)顯示的圖像選擇不同的備用文本。綁定數(shù)據(jù)時(shí),還可以使用DataAlternateTextFormatString屬性格式化備用文本。

·按鈕列:可以創(chuàng)建“編輯”、“更新”、“取消”和“刪除”功能的按鈕。當(dāng)GridView處于編輯模式時(shí),“編輯”按鈕被替換為兩個(gè)按鈕:“更新”按鈕和“取消”按鈕。此功能適用于字段內(nèi)容不長(zhǎng)的數(shù)據(jù)維護(hù)。當(dāng)添加按鈕列后,其對(duì)應(yīng)的HTML標(biāo)簽代碼如下:

<asp:ButtonFieldButtonType="Link"CommandName="Update"

HeaderText="編輯"ShowHeader="True"Text="更新"/>

<asp:CommandFieldButtonType="Button"HeaderText="操作"

ShowDeleteButton="True"ShowEditButton="True"

ShowHeader="True"ShowSelectButton="True"/>

·模板列:在使用GridView顯示數(shù)據(jù)時(shí),對(duì)每列進(jìn)行單獨(dú)控制。例如,在校園在線超市系統(tǒng)中,當(dāng)顯示商品列表時(shí),除顯示商品的基本信息外,還需顯示商品所屬的分類,而分類數(shù)據(jù)存放于另外一張數(shù)據(jù)表中,這時(shí),希望通過TextBox控件來顯示每個(gè)商品的分類信息。使用GridView的模板列可以很方便地實(shí)現(xiàn)自定義列。下面闡述圖形界面對(duì)模板列進(jìn)行設(shè)計(jì)的過程:

①新增模板列。選擇GridView控件智能標(biāo)簽菜單的“編輯列”,系統(tǒng)顯示如圖5-10所示界面。在可用字段中,將出現(xiàn)TemplateField字段,單擊“添加”按鈕,在“選定的字段”列表中,將出現(xiàn)“TemplateField”字段,這時(shí)可在其對(duì)應(yīng)的屬性欄中設(shè)置相應(yīng)的屬性。

②對(duì)模板列進(jìn)行編輯和設(shè)計(jì)。在設(shè)計(jì)視圖中,選擇GridView的智能標(biāo)記菜單中的“編輯模板”項(xiàng),在系統(tǒng)顯示的“GridView”任務(wù)窗口中,選擇新增的模板列,系統(tǒng)將顯示如圖5-12所示的界面。

圖5-12GridView模板編輯表5-3GridView控件中的模板類型根據(jù)不同的模板,可以在模板容器中選擇不同的控件,然后進(jìn)行數(shù)據(jù)綁定設(shè)置。下面的代碼在ItemTemplate模板項(xiàng)中添加標(biāo)簽控件Label1,并將其綁定到商品類別的ID上:

<asp:TemplateFieldHeaderText="商品類別">

<ItemTemplate>

<asp:LabelID="Label1"runat="server"

Text='<%#Eval("splb_TypeID")%>'>

</asp:Label>

</ItemTemplate>

</asp:TemplateField>上述代碼中,Eval方法可將控件綁定到數(shù)據(jù),當(dāng)用戶修改數(shù)據(jù)值時(shí),可以用Bind方法進(jìn)行數(shù)據(jù)綁定。

下面討論采用GridView控件顯示兩個(gè)數(shù)據(jù)表信息的方法。

【例5-2】使用GridView控件顯示商品記錄列表,并在GridView中添加一個(gè)模板列,用來顯示商品類別的名稱,如圖5-13所示。

圖5-13使用模板列在界面文件中綁定列和模板列的代碼如下:

<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"

DataSourceID="SqlDataSource1"BackColor="White"BorderColor="White"

BorderStyle="Ridge"BorderWidth="2px"CellPadding="3"CellSpacing="1"

GridLines="None"OnRowDataBound="GridView1_RowDataBound"Width="493px"

AllowPaging="True"PageSize="5">

<Columns>

<asp:BoundFieldDataField="sp_WareID"HeaderText="商品編號(hào)"

InsertVisible="False"ReadOnly="True"

SortExpression="sp_WareID"/>

<asp:BoundFieldDataField="sp_WareName"HeaderText="商品名稱"

SortExpression="sp_WareName"/>

<asp:BoundFieldDataField="sp_Price"HeaderText="單價(jià)"

SortExpression="sp_Price"/>

<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="審核"

SortExpression="sp_Checked"/>

<asp:TemplateFieldHeaderText="商品類別">

<ItemTemplate>

<asp:LabelID="Label1"runat="server"Width="102px"/>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString=

"<%$ConnectionStrings:SMDBConnStr%>"

SelectCommand="SELECT[sp_WareID],[sp_WareName],[sp_Price],

[splb_TypeID],[sp_Checked]FROM[T_Ware]">

</asp:SqlDataSource>需要注意的是,GridView中記錄的每一行都有商品類別,這就要求通過商品類別編號(hào)(splb_TypeID)作為參數(shù),以獲取商品類別的名稱,并賦給模板列中的Label1。這需要對(duì)GridView控件的RowDataBound事件編寫代碼,該事件是在數(shù)據(jù)綁定時(shí)觸發(fā)的。代碼如下:

protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)

{if(e.Row.RowType==DataControlRowType.DataRow){

//獲取每一行的商品類別的ID

inttypeID=Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,

"splb_TypeID"));

//獲取某商品類別ID的名稱

stringstr=TypeName(typeID);

//在GridView的行中查找名為“Label1”的控件

Labellbl=(Label)e.Row.FindControl("Label1");

lbl.Text=str;

}}下面的TypeName方法用來讀出指定商品類別編號(hào)(splb_TypeID)的商品所對(duì)應(yīng)的商品名稱:

protectedstringTypeName(inttypeID){

strings="";

stringstr="selectsplb_TypeNamefromT_WareTypewhere

splb_typeid="+typeID;

SqlConnectionstringstrconn=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

conn=newSqlConnection(strconn);

conn.Open();

SqlCommandcmd=newSqlCommand(str,conn);

SqlDataReadersdr=cmd.ExecuteReader();

if(sdr.Read()){

s=sdr["splb_TypeName"].ToString();

}conn.Close();

returns;

}

4.分頁(yè)

ASP.NET2.0中的GridView控件內(nèi)置分頁(yè),可以使用默認(rèn)分頁(yè)用戶界面和創(chuàng)建自定義的分頁(yè)界面。

使用GridView控件的界面方式可以很方便地實(shí)現(xiàn)分頁(yè)。在VS2005中的設(shè)計(jì)視圖中,單擊GridView的“智能標(biāo)記”菜單的“啟用分頁(yè)”項(xiàng),就可以實(shí)現(xiàn)自動(dòng)分頁(yè),如圖5-14所示。

圖5-14啟用GridView控件分頁(yè)也可以通過編程方式將GridView控件的AllowPaging屬性設(shè)置為True,并通過PageSize屬性來設(shè)置頁(yè)的大小,還可通過設(shè)置PageIndex屬性設(shè)置GridView控件的當(dāng)前頁(yè)。使用PagerSettings屬性進(jìn)行分頁(yè)的UI設(shè)計(jì),常用的模式如表5-4所示。表5-4GridView控件的分頁(yè)模式界面方式設(shè)置控件的PagerSettings屬性對(duì)應(yīng)的HTML標(biāo)簽代碼如下:

<PagerSettingsFirstPageText="首頁(yè)"LastPageText="末頁(yè)"Mode=

"NextPreviousFirstLast"NextPageText="下一頁(yè)"PreviousPageText="上一頁(yè)"/>

用戶也可以通過程序代碼設(shè)置PagerSettings的Mode屬性來自定義分頁(yè)模式,如:

GridView1.PagerSettings.Mode=PagerButtons.NextPrevious;

GridView1.PagerSettings.NextPageText="下一頁(yè)";

GridView1.PagerSettings.PreviousPageText="上一頁(yè)";

5.排序

像分頁(yè)一樣,可以像啟用分頁(yè)功能一樣啟用GridView控件的排序功能,也可以通過編程的方式將AllowSorting屬性設(shè)置為true來啟用排序。

啟用排序功能后,GridView控件將LinkButton控件呈現(xiàn)在列標(biāo)題中。同時(shí),該控件還將每一列的SortExpression屬性隱式設(shè)置為它所綁定的數(shù)據(jù)字段的名稱。例如,例5-2中GridView顯示的第一列為“商品編號(hào)”列,則該列的SortExpression屬性將被自動(dòng)設(shè)置為sp_WareID。當(dāng)在瀏覽器中查看時(shí),用戶可以單擊列標(biāo)題中的LinkButton控件,使之按該列排序。任務(wù)實(shí)現(xiàn)

步驟1新建名為WareList.aspx的頁(yè)面,并為該頁(yè)面選擇名為MasterPage.master的母版頁(yè)。在Content項(xiàng)內(nèi)添加所需控件,如圖5-15所示;設(shè)置各控件相應(yīng)的屬性,如表5-5所示。

圖5-15商品信息查詢界面設(shè)計(jì)表5-5界面控件設(shè)置步驟2為SqlDataSource1數(shù)據(jù)源控件配置鏈接字符串,代碼如下:

<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$

ConnectionStrings:SMDBConnStr%>">

</asp:SqlDataSource>步驟3為頁(yè)面裝載事件Page_Load添加如下代碼,將商品類別的名稱綁定到ddlWareType下拉列表控件,并設(shè)定grdWareList控件的數(shù)據(jù)源:

protectedvoidPage_Load(objectsender,EventArgse){

if(!IsPostBack){

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="selectsplb_TypeNamefromT_WareType";

SqlCommandcmd=newSqlCommand(str,sqlConn);

SqlDataReaderdr=cmd.ExecuteReader();

while(dr.Read()){

ddlWareType.Items.Add(dr["splb_TypeName"].ToString());

}

grdWareList.DataSourceID="SqlDataSource1";

}}步驟4為btnSelect按鈕添加單擊事件,實(shí)現(xiàn)查詢指定的商品名稱或商品類別的功能,查詢得到的數(shù)據(jù)動(dòng)態(tài)地綁定到grdWareList控件。由于界面設(shè)計(jì)中已將grdWareList控件與數(shù)據(jù)源SqlDataSource1控件綁定,因此要將查詢結(jié)果綁定到grdWareList控件上,則先要將其綁定設(shè)置清空,再重新綁定。

protectedvoidbtnSelect_Click(objectsender,EventArgse){

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="SELECTsp_WareName,sp_AllSum,sp_SellSum,

sp_Price,sp_Information,splb_TypeName";

str=str+"FROMT_WareaJOINT_WareTypeb

ONa.splb_TypeID=b.splb_TypeIDwhere";

str=str+"b.splb_TypeName='"

+ddlWareType.SelectedValue.ToString().Trim()+"'";

if(txtWareName.Text!=""){

str=str+"anda.sp_WareNamelike'"+"%"

+txtWareName.Text.Trim()+"%'";

}

//清除grdWareList控件的數(shù)據(jù)綁定

this.grdWareList.DataSourceID=null;

//設(shè)置SqlDataSource1控件的查詢字符串

SqlDataSource1.SelectCommand=str;

//重新綁定grdWareList控件的數(shù)據(jù)源

grdWareList.DataSourceID="SqlDataSource1";

}

步驟5瀏覽“WareList.aspx”頁(yè)面,查看其運(yùn)行效果。

任務(wù)描述

校園在線超市作為信息交易平臺(tái),每一位注冊(cè)會(huì)員都可以發(fā)布商品信息,并能對(duì)所發(fā)布的商品進(jìn)行管理,因此,要求為會(huì)員提供商品添加、刪除、修改等功能,并將相應(yīng)信息保存到數(shù)據(jù)庫(kù)中。5.2【任務(wù)11】商品信息的添加、修改和刪除

必備知識(shí)

知識(shí)1DataSet對(duì)象和DataAdapter對(duì)象

1.DataSet對(duì)象

DataSet對(duì)象即數(shù)據(jù)集對(duì)象。.NET的數(shù)據(jù)提供程序提供數(shù)據(jù)源和DataSet之間的連接,由于DataSet不依賴于數(shù)據(jù)源,因此這種數(shù)據(jù)訪問模式也稱為斷開連接模式。在ADO.NET中,DataSet用于在斷開式連接環(huán)境中存儲(chǔ)從數(shù)據(jù)源中收集的數(shù)據(jù)。DataSet對(duì)象是數(shù)據(jù)的一種內(nèi)存駐留表示形式,無(wú)論包含的數(shù)據(jù)來自什么數(shù)據(jù)源,它都會(huì)提供一致的關(guān)系編程模型。

DataSet對(duì)象把數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)DataTable中。每個(gè)DataTable可由來自惟一數(shù)據(jù)源中的數(shù)據(jù)組成。DataSet具備存儲(chǔ)多個(gè)表數(shù)據(jù)以及表間關(guān)系的能力,而每一個(gè)DataTable又包含了DataRow和DataColumn,分別存放表中行和列的數(shù)據(jù)信息,因此對(duì)數(shù)據(jù)集的操作主要是對(duì)DataSet包含的表中的行或列的操作,與直接對(duì)數(shù)據(jù)庫(kù)的操作一致。此外,DataSet對(duì)象中數(shù)據(jù)完全采用XML格式,因此,XML文檔可以導(dǎo)入DataSet對(duì)象,而DataSet對(duì)象中的數(shù)據(jù)也可以導(dǎo)出為XML文檔。也就是說,DataSet對(duì)象和XML文檔是可以互換的,這樣就使得跨平臺(tái)的數(shù)據(jù)訪問成為可能,也使得DataSet對(duì)象可以作為Web服務(wù)或者是其他類型遠(yuǎn)程調(diào)用的返回值。圖5-16所示給出了與DataSet類相關(guān)的主要類及它們間的關(guān)系。

圖5-16與DataSet類相關(guān)聯(lián)的主要類

2.DataAdapter對(duì)象

DataAdapter對(duì)象是DataSet和ADO.NET對(duì)象模型中斷開式連接對(duì)象之間的橋梁。該對(duì)象使用Connection對(duì)象與數(shù)據(jù)庫(kù)連接,然后使用Command和DataReader對(duì)象來獲取數(shù)據(jù)和處理數(shù)據(jù)庫(kù)的變化。

DataAdapter對(duì)象有很多屬性,這些屬性是包含SQL語(yǔ)句的SqlCommand和OleDbCommand對(duì)象。

DataAdapter對(duì)象有如下四個(gè)Command-type屬性:

·SelectCommand:這個(gè)屬性發(fā)布一個(gè)SQLSelect語(yǔ)句。

·UpdateCommand:這個(gè)屬性發(fā)布一個(gè)SQLUpdate語(yǔ)句。

·InsertCommand:這個(gè)屬性發(fā)布一個(gè)SQLInsert語(yǔ)句。

·DeleteCommand:這個(gè)屬性發(fā)布一個(gè)SQLDelete語(yǔ)句。

如果數(shù)據(jù)來自于單一的表,則可以使用CommandBuilder對(duì)象自動(dòng)生成DataAdapter的UpdateCommand、InsertCommand和DeleteCommand屬性,使用此對(duì)象可以節(jié)省開發(fā)

時(shí)間。另外,DataAdapter對(duì)象的Fill方法用于填充數(shù)據(jù)集,而Update方法用于更新數(shù)據(jù)庫(kù)。

3.填充數(shù)據(jù)集

填充DataSet時(shí),DataAdapter將查詢的結(jié)果存儲(chǔ)在DataSet的DataTable對(duì)象中,當(dāng)執(zhí)行這一過程時(shí),DataAdapter使用一個(gè)SelectCommand來與數(shù)據(jù)庫(kù)通信,并在內(nèi)部使用DataReader來獲取查詢結(jié)果,最后才將結(jié)果復(fù)制到DataSet中的表中,這就是數(shù)據(jù)填充的過程。具體操作時(shí),只要調(diào)用其Fill方法即可。

從上述可知,DataAdapter填充DataSet的過程主要分為兩個(gè)步驟:

·通過DataAdapter的SelectCommand屬性從數(shù)據(jù)庫(kù)中檢索出所需數(shù)據(jù)。

·調(diào)用DataAdapter的Fill方法把檢索出的數(shù)據(jù)填充到DataSet中。

填充數(shù)據(jù)集代碼如下:

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="SELECT*FROMT_WareType"

SqlDataAdapterda=newSqlDataAdapter(str,sqlConn);

DataSetds=newDataSet();

da.Fill(ds,"splb");這時(shí),DataSet中的表可以直接作為數(shù)據(jù)控件的數(shù)據(jù)源,只需設(shè)置數(shù)據(jù)源控件的DataSource屬性,再調(diào)用DataBind方法就可以將控件與數(shù)據(jù)聯(lián)系起來。例如,將商品信息用上節(jié)講到的GridView控件關(guān)聯(lián)起來,實(shí)現(xiàn)的代碼如下:

GridView1.DataSource=ds.Tables["splb"].DefaultView;

GridView1.DataBind();

4.使用DataSet對(duì)數(shù)據(jù)源中的記錄進(jìn)行編輯

利用DataSet對(duì)數(shù)據(jù)源中的記錄進(jìn)行編輯的主要步驟是:將數(shù)據(jù)源中的有關(guān)內(nèi)容寫入內(nèi)存數(shù)據(jù)庫(kù);更改內(nèi)存數(shù)據(jù)庫(kù)中的內(nèi)容;更改完成后,調(diào)用DataAdapter對(duì)象的Update方法,并根據(jù)DataSet內(nèi)的數(shù)據(jù)更新情況,分別應(yīng)用于InsertCommand、UpdateCommadn、DeleteCommand屬性的Command命令,以將數(shù)據(jù)寫回?cái)?shù)據(jù)庫(kù)。怎樣設(shè)置用于更新數(shù)據(jù)源的SQL語(yǔ)句及參數(shù)呢?我們可以使用CommandBuilder對(duì)象,系統(tǒng)可根據(jù)內(nèi)存數(shù)據(jù)表自建立以來的變化情況,自動(dòng)生成UpdateCommand、DeleteCommand和InsertCommand屬性,并提供相應(yīng)的單一命令的方法,它會(huì)自動(dòng)協(xié)調(diào)DataSet,通過DataAdapter對(duì)象對(duì)后臺(tái)數(shù)據(jù)庫(kù)更新。只需添加如下代碼行:

SqlCommandBuilderscmd=newSqlCommandBuilder(da);

1)添加記錄

添加新記錄需要?jiǎng)?chuàng)建數(shù)據(jù)表中的新行,再使用添加行的方法。

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.NewRow();

row["splb_TypeName"]=TextBox1.Text;

dt.Rows.Add(row);

da.Update(ds,"splb");

2)更新記錄

更新記錄前首先應(yīng)取得更新行。在創(chuàng)建DataRow對(duì)象的實(shí)例時(shí),與添加新記錄是不一樣的。

stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.Rows[0];

row["splb_TypeName"]=TextBox1.Text;

da.Update(ds,"splb");

3)刪除記錄

刪除記錄同樣要先獲取刪除行的記錄,再調(diào)用行的Delete方法。

stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.Rows[0];

row.Delete();

da.Update(ds,"splb");從上面可知,使用DataSet和CommandBuilder對(duì)象對(duì)數(shù)據(jù)庫(kù)操作的代碼非常簡(jiǎn)潔,只需通過row[″字段名″]即可讀取或設(shè)置字段值,沒有了冗長(zhǎng)的SQL語(yǔ)句和復(fù)雜的標(biāo)點(diǎn)符號(hào)。要注意的事,不論是更新、刪除還是添加操作,最后都必須調(diào)用Update方法,否則,DataSet中更新的數(shù)據(jù)不會(huì)寫回?cái)?shù)據(jù)庫(kù)中。此外,使用CommandBuilder對(duì)象時(shí),被更新的表中要有主鍵,否則會(huì)出現(xiàn)“對(duì)于不返回任何鍵列信息的SelectCommand不支持UpdateCommand的動(dòng)態(tài)SQL生成”的錯(cuò)誤信息。

知識(shí)2FileUpLoad控件和FormView控件

1.FileUpLoad控件

FileUpLoad控件是ASP.NET2.0新增控件,該控件使用戶更容易地瀏覽和選擇用于上傳的文件。它包含一個(gè)瀏覽按鈕和用于輸入文件名的文本框,用戶可以在文本框中輸入完整的文件路徑,或者通過按鈕瀏覽并選擇需要上傳的文件。其HTML標(biāo)簽代碼如下:

<asp:FileUploadID="FileUpload1"runat="server"/>

除從WebControl類繼承的標(biāo)準(zhǔn)成員外,F(xiàn)ileUpload控件還公開了幾個(gè)只讀的屬性,如表5-6所示。表5-6FileUpload控件的屬性其中HttpPostedFile類的屬性如表5-7所示。

表5-7HttpPostedFile類的屬性

FileUpload控件不會(huì)自動(dòng)上傳文件,必須設(shè)置相關(guān)的事件處理程序,并在程序中實(shí)現(xiàn)文件上傳。

FileUpload控件的SaveAs方法用于將上傳的文件保存到服務(wù)器上。一般來說,使用FileUpload控件上傳文件一般有如下幾個(gè)步驟:

·利用HasFile屬性判斷是否上傳了文件。

·在服務(wù)器上指定一個(gè)物理路徑,并檢查這個(gè)物理路徑是否存在,如果不存在則先創(chuàng)建。

·指定上傳文件在服務(wù)器上的上傳路徑,利用SaveAs()保存上傳的文件。這一步還可以做一些其他檢查工作,如檢查上傳的文件格式是否符合要求或文件內(nèi)容大小是否符合

要求。

·將相對(duì)路徑或者URL地址保存起來,以便客戶訪問或者下載。

【例5-3】FileUpLoad控件的使用。

在校園在線超市系統(tǒng)中,商品發(fā)布時(shí)都要上傳商品所對(duì)應(yīng)的圖片。本例實(shí)現(xiàn)的功能是通過FileUpLoad控件實(shí)現(xiàn)商品圖片的上傳,通過點(diǎn)擊上傳按鈕將指定的圖片保存在應(yīng)用程序的images目錄下,并在頁(yè)面中顯示上傳的圖片及相關(guān)信息,如圖5-17所示。

圖5-17FileUpLoad的使用實(shí)現(xiàn)代碼如下:

protectedvoidUpLoad_Click(objectsender,EventArgse){

boolfileValid=false;

//設(shè)置標(biāo)簽和圖像顯示控件的可見性

Label1.Visible=true;

Image1.Visible=true;

if(this.FileUpload1.HasFile){

//獲取指定路徑字符串的擴(kuò)展名

StringfileExtension=

Path.GetExtension(this.FileUpload1.FileName).ToLower();

//設(shè)置上傳文件的類型

String[]allowExtension={".gif",".jpg",".bmp",".png"};

for(inti=0;i<allowExtension.Length;i++){

if(fileExtension==allowExtension[i]){

fileValid=true;

}}

if(fileValid==true){

try{

//將上傳的文件保存到指定的路徑下

this.FileUpload1.SaveAs(Server.MapPath("~/Images/")

+FileUpload1.FileName);

this.Image1.ImageUrl="~/Images/"+FileUpload1.FileName;

this.Label1.Text="上傳文件成功";

this.Label1.Text+="<br/>";

//獲取上傳文件的相關(guān)信息

this.Label1.Text+="<li>"+"原文件路徑:"

+this.FileUpload1.PostedFile.FileName;

this.Label1.Text+="<br/>";

this.Label1.Text+="<li>"+"文件大?。?

+this.FileUpload1.PostedFile.ContentLength+"字節(jié)";

this.Label1.Text+="<br/>";

this.Label1.Text+="<li>"+"文件類型:"

+this.FileUpload1.PostedFile.ContentType;

}catch{

this.Label1.Text="文件上傳不成功";

}}

else{

this.Label1.Text="請(qǐng)上傳后綴為.gif,.jpg,.bmp,.png的文件";

}}}

2.FormView控件

可以使用FormView控件訪問和操作數(shù)據(jù)源的單個(gè)記錄,通常用于對(duì)記錄更新和插入。FormView控件不指定用于顯示記錄的預(yù)定義布局。實(shí)際上,可以創(chuàng)建一個(gè)包含控件的模板,以顯示記錄中的各個(gè)字段。該模板包含用于創(chuàng)建窗體的格式、控件和綁定表達(dá)式。

FormView控件的用法和GridView控件的用法非常類似,它支持的模板類型有EditItemTemplate、EmptyDataTemplate、FooterTemplate、HeaderTemplate、ItemTemplate、InsertItemTemplate和PagerTemplate。應(yīng)注意,這里沒有AlternatingItemTemplate模板(一條記錄自然就不會(huì)有什么奇偶行效果了)。

FormView控件支持以下功能:

·綁定到數(shù)據(jù)源控件,如SqlDataSource和ObjectDataSource。

·內(nèi)置插入功能。

·內(nèi)置更新和刪除功能。

·內(nèi)置分頁(yè)功能。

·動(dòng)態(tài)設(shè)置屬性、事件處理等。

·可通過用戶定義的模板、主題和樣式自定義外觀。

FormView控件一次只能顯示一條數(shù)據(jù),但是如果綁定的數(shù)據(jù)源有多條記錄,則默認(rèn)顯示第一條記錄;支持像GridView那樣分頁(yè)顯示數(shù)據(jù)源中的每條記錄。

<!--定義FormView控件,并允許分頁(yè)-->

<asp:FormViewID="FormView1"runat="server"DataKeyNames="sp_WareID"

DataSourceID="SqlDataSource1"Height="150px"Width="198px"

BackColor="Linen"AllowPaging="True">

<!--定義FormView的數(shù)據(jù)編輯模板-->

<EditItemTemplate>

sp_WareID:

<asp:LabelID="sp_WareIDLabel1"runat="server"Text='<%#

Eval("sp_WareID")%>'></asp:Label><br/>

sp_Information:

<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:TextBox><br/>

sp_Time:

<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#

Bind("sp_Time")%>'>

</asp:TextBox><br/>

sp_Price:

<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#

Bind("sp_Price")%>'>

</asp:TextBox><br/>

sp_WareName:

<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:TextBox><br/>

<!--定義命令按鈕-->

<asp:LinkButtonID="UpdateButton"runat="server"

CausesValidation="True"CommandName="Update"

Text="更新">

</asp:LinkButton>

<asp:LinkButtonID="UpdateCancelButton"runat="server"

CausesValidation="False"CommandName="Cancel"

Text="取消">

</asp:LinkButton>

</EditItemTemplate>

<!--定義FormView的數(shù)據(jù)插入模板-->

<InsertItemTemplate>

sp_Information:

<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:TextBox><br/>

sp_Time:

<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#

Bind("sp_Time")%>'>

</asp:TextBox><br/>

sp_Price:

<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#

Bind("sp_Price")%>'>

</asp:TextBox><br/>

sp_WareName:

<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:TextBox><br/>

<!--定義命令按鈕-->

<asp:LinkButtonID="InsertButton"runat="server"CausesValidation="True"

CommandName="Insert"

Text="插入">

</asp:LinkButton>

<asp:LinkButtonID="InsertCancelButton"runat="server"

CausesValidation="False"CommandName="Cancel"

Text="取消">

</asp:LinkButton>

</InsertItemTemplate>

<!--定義FormView的數(shù)據(jù)顯示模板-->

<ItemTemplate>

sp_WareID:

<asp:LabelID="sp_WareIDLabel"runat="server"Text='<%#

Eval("sp_WareID")%>'></asp:Label><br/>

sp_Information:

<asp:LabelID="sp_InformationLabel"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:Label><br/>

sp_Time:

<asp:LabelID="sp_TimeLabel"runat="server"Text='<%#Bind("sp_Time")%>'>

</asp:Label><br/>

sp_Price:

<asp:LabelID="sp_PriceLabel"runat="server"Text='<%#Bind("sp_Price")%>'>

</asp:Label><br/>

sp_WareName:

<asp:LabelID="sp_WareNameLabel"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:Label><br/>

<!--定義命令按鈕-->

<asp:LinkButtonID="EditButton"runat="server"CausesValidation="False"

CommandName="Edit"

Text="編輯">

</asp:LinkButton>

<asp:LinkButtonID="DeleteButton"runat="server"

CausesValidation="False"CommandName="Delete"

Text="刪除">

</asp:LinkButton>

<asp:LinkButtonID="NewButton"runat="server"CausesValidation="False"

CommandName="New"

Text="新建">

</asp:LinkButton>

</ItemTemplate>

</asp:FormView>

<!--定義數(shù)據(jù)源控件-->

<asp:SqlDataSourceID="SqlDataSource1"runat="server"

ConflictDetection="CompareAllValues"

ConnectionString="<%$ConnectionStrings:SMDBConnStr%>"

DeleteCommand="DELETEFROM[T_Ware]WHERE[sp_WareID]=@original_sp_WareID

AND[sp_Price]=@original_sp_PriceAND[sp_WareName]=

@original_sp_WareNameAND[sp_Information]=@original_sp_Information"

InsertCommand="INSERTINTO[T_Ware]([sp_Price],[sp_WareName],[sp_Information])

VALUES(@sp_Price,@sp_WareName,@sp_Information)"

OldValuesParameterFormatString="original_{0}"

SelectCommand="SELECT[sp_WareID],[sp_Price],[sp_WareName],[sp_Information]FROM

[T_Ware]"

UpdateCommand="UPDATE[T_Ware]SET[sp_Price]=@sp_Price,[sp_WareName]=

@sp_WareName,[sp_Information]=@sp_InformationWHERE[sp_WareID]=

@original_sp_WareIDAND[sp_Price]=@original_sp_PriceAND

[sp_WareName]=@original_sp_WareNameAND[sp_Information]=

@original_sp_Information">

<DeleteParameters>

<asp:ParameterName="original_sp_WareID"Type="Int32"/>

<asp:ParameterName="original_sp_Price"Type="Double"/>

<asp:ParameterName="original_sp_WareName"Type="String"/>

<asp:ParameterName="original_sp_Information"Type="String"/>

</DeleteParameters>

<UpdateParameters>

<asp:ParameterName="sp_Pric

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論