C#創(chuàng)建Web應(yīng)用程序代碼實(shí)例
使用微軟正在推行的.NET技術(shù)和C#語言可以快速建立Web應(yīng)用程序,其安全性和可升級性都大大勝過普通的ASP應(yīng)用程序。在這篇文章里,我們將使用.NET和C#一步一步的建立一個應(yīng)用程序。
系統(tǒng)需求:
Internet Explorer 5.5
Windows 2000 Professional, Server 或 Advanced Server
ASP+/Microsoft .NET (預(yù)覽版可以在 http://msdn.microsoft.com/net 下載)
SQL Server 7.0 + SP1 或更高版本
使用微軟 .NET的高級對象模型(Advanced Object Model)可以快速建立安全的,易于升級性的Web應(yīng)用程序。
微軟的 .NET是一個開發(fā)商業(yè)解決方案的理想技術(shù)。.NET技術(shù)結(jié)合C#的彈性和高性能,開發(fā)商業(yè)程序比以往僅僅使用ASP的方法更為簡單。
在這篇文章里,我們將使用 .NET和C#來建立一個簡單的商業(yè)應(yīng)用程序--一個能夠讓客戶瀏覽你的產(chǎn)品目錄的程序。
這個程序包含了最基本的.NET和C#技術(shù),在本文中,將涉及到如何建立和編譯C#的商業(yè)應(yīng)用層組件。也將談到怎樣使用ASPX頁面存取組件和綁定數(shù)據(jù)。綜合使用這些技術(shù),可以花費(fèi)比傳統(tǒng)的ASP方法更少的時間建立Web應(yīng)用程序。
穩(wěn)固的.NET應(yīng)用程序仍然依靠于穩(wěn)固的數(shù)據(jù)庫計劃和精心編寫的存儲過程。
應(yīng)用程序可以通過組件調(diào)用已經(jīng)寫好的存儲過程。大部分多層方法都不推薦直接從程序中調(diào)用數(shù)據(jù),那樣會降低程序的速度,也不利于調(diào)試。
本文主要討論C#和ASP+,不過多的討論建立數(shù)據(jù)庫和存儲過程。
組件的開發(fā)
我們將要編寫的c#組件同時作為邏輯層和數(shù)據(jù)存取層。
如果打算將來把程序移植到另一種數(shù)據(jù)庫中,比如Oracle,那么需要把邏輯層和數(shù)據(jù)存取層分別放在兩個組件中。本文中只使用SQL Server,所以不需要分開它們。
這個應(yīng)用程序需要兩個頁面:Default.aspx 和 ProductList.aspx。 Default.aspx 是用戶訪問Web首先看見的頁面,它列出所有的產(chǎn)品種類。用戶從Default.aspx菜單中選擇種類后,將進(jìn)入ProductList.aspx頁面,這個頁面顯示了當(dāng)前類所有產(chǎn)品的列表。
在用戶使用這兩個頁面的過程中,發(fā)生了兩個動作:第一個是在菜單中列出產(chǎn)品種類(Default.aspx),第二個是在產(chǎn)品列表的頁面中列出產(chǎn)品(ProductList.aspx)。
我們可以建立兩個函數(shù)來完成這兩個任務(wù),這兩個函數(shù)都通過調(diào)用存儲過程獲取數(shù)據(jù)。對應(yīng)這兩個函數(shù),我們在一個叫做CommerceDotNet的名字空間中建立起兩個類:Category 和 Product。(圖1)使用CommerceDotNet.Categories實(shí)例化Categories類,使用CommerceDotNet.Products實(shí)例化Products類。
為了使代碼清晰,我們在不同的文件中分別聲明這兩個類。由于他們共享一個名字空間,即使在不同的文件聲明,在編譯后也將成為一個單獨(dú)的組件。
CategoryList方法傳遞了一個包含所有產(chǎn)品種類的數(shù)據(jù)集給系統(tǒng)。在Categories類中加入CategoryList的方法。
代碼如下:
namespace CommerceDotNet {
public class Categories {
public DataSet CategoryList() {
}
}
}
建立了這個類以后,開始為CategoryList方法添加代碼。
CategoryList方法獲取數(shù)據(jù)的過程分為四步:
1.通過SQLConnection和SQLDataSetCommand對象建立數(shù)據(jù)連接和命令對象。
2.把命令對象類型設(shè)置為存儲過程。
3.把存儲過程ListCategory的結(jié)果送入數(shù)據(jù)集。
4.把包含結(jié)果的數(shù)據(jù)集返回給調(diào)用它的函數(shù)。
完整的CategoryList方法代碼如下:
public DataSet CategoryList() {
// 建立數(shù)據(jù)連接和命令對象
SQLConnection myConnection = new SQLConnection
("server=localhost;uid=sa;pwd=;database=commercedotnet");
SQLDataSetCommand myCommand = new SQLDataSetCommand("ListCategory", myConnection);
// 設(shè)置命令對象類型為存儲過程
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
// 建立和填充數(shù)據(jù)集
DataSet myDataSet = new DataSet();
myCommand.FillDataSet(myDataSet, "CategoryList");
// 返回數(shù)據(jù)集
return myDataSet;
}
ProductsList方法和CategoryList方法類似,但是ProductsList向存儲過程傳遞了一個參數(shù)。
代碼如下:
public DataSet ProductsList(int categoryID) {
// 建立數(shù)據(jù)連接和命令對象
SQLConnection myConnection = new SQLConnection
("server=localhost;uid=sa;pwd=;database=commercedotnet");
SQLDataSetCommand myCommand = new SQLDataSetCommand("ListProducts", myConnection);
// 設(shè)置命令對象類型為存儲過程
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
// 向存儲過程傳遞參數(shù)
SQLParameter parameterCategoryID = new SQLParameter("@CategoryID", SQLDataType.Int, 4);
parameterCategoryID.Value = categoryID;
myCommand.SelectCommand.Parameters.Add(parameterCategoryID);
// 建立和填充數(shù)據(jù)集
DataSet myDataSet = new DataSet();
myCommand.FillDataSet(myDataSet, "Products");
// 返回數(shù)據(jù)集
return myDataSet;
}
2個類都建立好以后,編譯程序。
使用命令:csc /out:../bin/CommerceDotNet.dll /t:library /r:System.Data.dll CategoryDB.cs ProductDB.cs
"/out:"開關(guān)指定編譯庫名和存放位置,"/t:"開關(guān)告訴編譯器建立庫,"/r:"開關(guān)指出組件涉及到的其他庫,完整的源程序在文末后面列出。
ASP+頁面的開發(fā)
建立好組件以后,下面的工作是開發(fā)作為用戶界面ASP+頁面。前面的部分,我們設(shè)計了default.aspx 和 productslist.aspx 頁,Default.aspx頁是站點(diǎn)被裝入后的第一頁,我們就從建立這個缺省頁面開始。
當(dāng)頁面讀入時,觸發(fā)Page_Load()方法,這個方法完成了從數(shù)據(jù)庫獲取的數(shù)據(jù)并綁定到MyList的任務(wù)。首先,聲明一個ICollection型變量menuItems。然后,實(shí)例化組件,調(diào)用CategoryList方法,把數(shù)據(jù)集存放在menuItems對象中。設(shè)置MyList的數(shù)據(jù)源為menuItems。執(zhí)行MyList.DataBind方法把數(shù)據(jù)綁定到MyList。
這部分代碼如下:
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {
ICollection menuItems;
CommerceDotNet.Categories categories = new CommerceDotNet.Categories();
menuItems = categories.CategoryList().Tables[0].DefaultView;
MyList.DataSource = menuItems;
MyList.DataBind();
}
</script>
default.aspx中其他代碼與傳統(tǒng)的ASP頁面類似,請參見文末列出的代碼。
ProductList.aspx與default.aspx類似,但是,綁定數(shù)據(jù)的代碼有些變化,因為,在開發(fā)C#組件的時候,我們在CommerceDotNet.ProductsList方法中向存儲過程中傳遞了參數(shù),所以,ASP+頁面中也需要有相應(yīng)的變化。
CommerceDotNet.Products products = new CommerceDotNet.Products();
MyProductList.DataSource = products.ProductsList(categoryId).Tables[0].DefaultView;
MyProductList.DataBind();
至此,兩個ASP+頁面也創(chuàng)建完畢。
這樣,結(jié)合C#和ASP+的最基礎(chǔ)的應(yīng)用程序就創(chuàng)建好了。
這個程序展示了微軟.NET和C#技術(shù)的強(qiáng)大威力,在這個基礎(chǔ)上,再作進(jìn)一步的增添和修改,很容易開發(fā)出強(qiáng)大的站點(diǎn)。
希望本篇文章對您有所幫助
- C# 如何在WINForm程序中創(chuàng)建XML文件
- 使用Visual Studio2019創(chuàng)建C#項目(窗體應(yīng)用程序、控制臺應(yīng)用程序、Web應(yīng)用程序)
- C#創(chuàng)建SQLite控制臺應(yīng)用程序詳解
- C#創(chuàng)建WCF服務(wù)控制臺應(yīng)用程序詳解
- C#通過創(chuàng)建Windows服務(wù)啟動程序的方法詳解
- C#程序中創(chuàng)建、復(fù)制、移動、刪除文件或文件夾的示例
- C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼
- C# 創(chuàng)建控制臺應(yīng)用程序
相關(guān)文章
Java如何基于EasyExcel實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)校驗并生成錯誤信息Excel
這篇文章主要介紹了Java如何基于EasyExcel實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)校驗并生成錯誤信息Excel,為了優(yōu)化項目中的文件導(dǎo)入功能,考慮構(gòu)建一個基于EasyExcel的通用Excel導(dǎo)入框架,主要解決導(dǎo)入數(shù)據(jù)的校驗問題,避免業(yè)務(wù)代碼中堆積大量校驗邏輯,需要的朋友可以參考下2024-09-09
idea顯示springboot多服務(wù)啟動界面service操作
這篇文章主要介紹了idea顯示springboot多服務(wù)啟動界面service操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java使用JavaMail API發(fā)送和接收郵件的代碼示例
JavaMail是Oracle甲骨文開發(fā)的Java郵件類API,支持多種郵件協(xié)議,這里我們就來看一下Java使用JavaMail API發(fā)送和接收郵件的代碼示例2016-06-06
面試必問項之Set實(shí)現(xiàn)類:TreeSet
這篇文章主要介紹了Java TreeSet類的簡單理解和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-07-07
教你用Java在個人電腦上實(shí)現(xiàn)微信掃碼支付
今天給大家?guī)淼氖荍ava實(shí)戰(zhàn)的相關(guān)知識,文章圍繞著Java在個人電腦上實(shí)現(xiàn)微信掃碼支付展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Springboot整合Netty自定義協(xié)議實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了Springboot整合Netty自定義協(xié)議實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
springboot中RabbitMQ死信隊列的實(shí)現(xiàn)示例
死信隊列是一種特殊的消息隊列,用來存儲無法被正常消費(fèi)的消息,常被用來實(shí)現(xiàn)延遲處理,異常消息處理等,本文主要介紹了springboot中RabbitMQ死信隊列的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-01-01

