《ASP NET程序設(shè)計(jì)案例教程》課件第9章_第1頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第9章_第2頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第9章_第3頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第9章_第4頁(yè)
《ASP NET程序設(shè)計(jì)案例教程》課件第9章_第5頁(yè)
已閱讀5頁(yè),還剩68頁(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)介

第9章應(yīng)用程序架構(gòu)9.1應(yīng)用程序架構(gòu)9.2校園在線超市系統(tǒng)多層架構(gòu)實(shí)現(xiàn)

【本章提要】

本章介紹了企業(yè)級(jí)應(yīng)用多層設(shè)計(jì)的模式,闡述了應(yīng)用分層的好處。并以校園在線超市用戶注冊(cè)模塊為例,詳細(xì)介紹了系統(tǒng)分層架構(gòu)的實(shí)現(xiàn)過(guò)程。

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

·理解從兩層架構(gòu)發(fā)展成多層架構(gòu)。

·掌握將多層體系架構(gòu)的理念融入到Web應(yīng)用項(xiàng)目的設(shè)計(jì)和實(shí)施方法。

9.1.1將應(yīng)用分層的好處

在大型公司里往往運(yùn)行著大規(guī)模的軟件系統(tǒng),開(kāi)發(fā)人員和分析師們專注于不同的應(yīng)用層級(jí)。這確實(shí)是必須的,因?yàn)椴豢赡茏岄_(kāi)發(fā)人員都理解某個(gè)層級(jí)所有的運(yùn)行細(xì)節(jié),若那樣,則系統(tǒng)實(shí)在是太龐大了。

9.1應(yīng)用程序架構(gòu)想象一下某個(gè)保險(xiǎn)公司里的應(yīng)用程序必須完成的所有功能。從最簡(jiǎn)化的流程來(lái)說(shuō),保險(xiǎn)公司要能接收新的保險(xiǎn)單,評(píng)估與保險(xiǎn)單相關(guān)的風(fēng)險(xiǎn),向投保者開(kāi)出賬單,打印保險(xiǎn)單然后將它郵寄出去,處理保險(xiǎn)單的索賠,更新保險(xiǎn)單,如果過(guò)期(或者沒(méi)有支付費(fèi)用)則取消保險(xiǎn)單,等等。這一巨大的流程顯然不僅僅是一個(gè)桌面應(yīng)用程序所能處理的。

無(wú)論用戶是不是想這么做,Web應(yīng)用還是分層的好。如果用戶是用SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的,那么數(shù)據(jù)庫(kù)本身就已經(jīng)是一個(gè)從Web服務(wù)器上分離出來(lái)的層了(即使物理上它們是在同一臺(tái)計(jì)算機(jī)里)。作為一個(gè)面向?qū)ο蟮钠脚_(tái),ASP.NET使得這種分層操作更加容易了。應(yīng)用程序分層使得整個(gè)開(kāi)發(fā)更加容易,因?yàn)榉謱訉⒛承┨囟康牟僮鞣庋b成一個(gè)個(gè)獨(dú)立的模塊,它們可以單獨(dú)維護(hù)和修改,同時(shí)也分散了維護(hù)的工作量。

例如,一個(gè)簡(jiǎn)單的在線零售程序采用了分層的思想,如圖9-1所示。

從圖中可以看出物理硬件分層與應(yīng)用程序分層的結(jié)合。實(shí)際上有三個(gè)分層運(yùn)行于一個(gè)Web服務(wù)器上,第一層是Web站點(diǎn)的用戶界面層(UserInterface),它由業(yè)務(wù)規(guī)則層支持,業(yè)務(wù)規(guī)則層(BusinessRulesLayer)決定什么樣的數(shù)據(jù)將被提供給用戶界面層,業(yè)務(wù)規(guī)則層與數(shù)據(jù)訪問(wèn)層交互,而數(shù)據(jù)訪問(wèn)層則通過(guò)一個(gè)事務(wù)通道程序來(lái)獲取所需要的數(shù)據(jù),其他的客戶服務(wù)和倉(cāng)庫(kù)系統(tǒng)也通過(guò)事務(wù)通道程序來(lái)獲得所需的數(shù)據(jù)。

圖9-1在線零售應(yīng)用程序的分層每一層都僅僅關(guān)注于自身的功能實(shí)現(xiàn),如業(yè)務(wù)規(guī)則層不需要知道任何關(guān)于數(shù)據(jù)存儲(chǔ)方面的信息,它只需要了解由數(shù)據(jù)訪問(wèn)層提供的接口即可。事實(shí)上,業(yè)務(wù)規(guī)則層完全不必關(guān)心使用什么樣的數(shù)據(jù)庫(kù),或者是否存在一個(gè)數(shù)據(jù)庫(kù)。它只需要了解有一個(gè)數(shù)據(jù)訪問(wèn)層能用于交互,以及它可以通過(guò)一個(gè)公共的接口來(lái)交互數(shù)據(jù)即可。

盡管整個(gè)系統(tǒng)的完善需要集成測(cè)試,但是如果各層之間一致認(rèn)同的接口沒(méi)有發(fā)生改變,則我們可以在不干擾其他層的情況下改變?nèi)魏我粚拥膬?nèi)部結(jié)構(gòu)。9.1.2n級(jí)架構(gòu)

任何關(guān)于應(yīng)用程序架構(gòu)的討論中,如果沒(méi)有提到經(jīng)典的n級(jí)架構(gòu),那么就是不完整的?!皀”代表任何數(shù)字,適用于描述我們所創(chuàng)建的應(yīng)用程序。層(layer)或級(jí)(tier)的數(shù)目,由應(yīng)用程序塊的需求和結(jié)構(gòu)來(lái)決定。

一般而言,甚至最基本的Web應(yīng)用程序都能夠被分離成三層:用戶界面層(UI)、業(yè)務(wù)規(guī)則層(BusinessRulesLayer)以及數(shù)據(jù)層(DataLayer)。用戶界面層就是用戶能夠見(jiàn)到的HTML和Web控件,業(yè)務(wù)規(guī)則層則承擔(dān)著應(yīng)用程序最重要的角色,而數(shù)據(jù)層則是數(shù)據(jù)庫(kù)或者其他數(shù)據(jù)訪問(wèn)代碼,這取決于應(yīng)用程序的結(jié)構(gòu)。如果需要,可以將應(yīng)用程序分得更細(xì):用戶可以擁有用戶界面(.aspx頁(yè)面)、作為用戶界面“粘合劑”而被頁(yè)面繼承的類或局部類、業(yè)務(wù)規(guī)則層(業(yè)務(wù)規(guī)則類)、數(shù)據(jù)訪問(wèn)層(數(shù)據(jù)訪問(wèn)類)以及數(shù)據(jù)層本身(數(shù)據(jù)庫(kù))。

假如由于某種原因,決定將SQLServer數(shù)據(jù)庫(kù)替換為Oracle數(shù)據(jù)庫(kù),則如果沒(méi)有將應(yīng)用程序分層,而且把數(shù)據(jù)訪問(wèn)代碼放在.aspx頁(yè)面里,那么用戶將不得不冒著把事情搞砸的風(fēng)險(xiǎn),檢查所有頁(yè)面。這顯然不是一種有效的代碼管理方式。實(shí)際上,每個(gè)頁(yè)面間操作數(shù)據(jù)的方式都不同。如果把所有的數(shù)據(jù)訪問(wèn)代碼都放在單個(gè)層里,如一個(gè)擁有操作數(shù)據(jù)方法的類,這樣就可以在不破壞業(yè)務(wù)規(guī)則或者用戶界面的情況下對(duì)代碼進(jìn)行修改。

另一種很常見(jiàn)的情況是,假設(shè)在電子商務(wù)程序中,業(yè)務(wù)規(guī)則要求改變稅款的計(jì)算方式,數(shù)據(jù)庫(kù)沒(méi)有變化,站點(diǎn)本身也不需要變化,僅僅是邏輯改變了,那就意味著只需要改變業(yè)務(wù)規(guī)則層中的類即可。再者,如果邏輯將創(chuàng)建在頁(yè)面中或者是由某些數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的計(jì)算所組成的,那么這項(xiàng)修改操作將變得十分困難。在一個(gè)極端的例子里,稅率可能經(jīng)常改變,那么就不能將稅率硬編碼到代碼中。一般的解決方式是將稅率存儲(chǔ)在數(shù)據(jù)庫(kù)中,并創(chuàng)建用戶易于操作的相關(guān)工具。

9.2.1系統(tǒng)架構(gòu)設(shè)計(jì)

微軟

.NET平臺(tái)可以方便快速地開(kāi)發(fā)和部署多層架構(gòu)應(yīng)用程序。在校園在線超市系統(tǒng)中,其架構(gòu)在邏輯上劃分成數(shù)據(jù)實(shí)體層(DML)、數(shù)據(jù)訪問(wèn)層(DAL)、業(yè)務(wù)邏輯層(BLL)和應(yīng)用層(UI)四層,如圖9-2所示。9.2校園在線超市系統(tǒng)多層架構(gòu)實(shí)現(xiàn)

圖9-2系統(tǒng)分層架構(gòu)設(shè)計(jì)從圖中看出,這種分層結(jié)構(gòu)易于理解,同時(shí)也使應(yīng)用程序的維護(hù)和修改變得更加容易。假定我們要為MicrosoftAccess數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新的數(shù)據(jù)訪問(wèn)層,則只需要改變數(shù)據(jù)訪問(wèn)層代碼即可。通過(guò)用戶界面進(jìn)行的輸入和輸出數(shù)據(jù)的過(guò)程,實(shí)際上是在創(chuàng)建業(yè)務(wù)邏輯層的各種對(duì)象。例如,在應(yīng)用程序中添加一個(gè)新的商品時(shí),只需要?jiǎng)?chuàng)建一個(gè)商品對(duì)象,而不需要了解任何關(guān)于數(shù)據(jù)庫(kù)中的具體細(xì)節(jié)。下面以“用戶注冊(cè)模塊”為例,說(shuō)明校園在線超市系統(tǒng)的多層實(shí)現(xiàn)過(guò)程。為了區(qū)分校園在線超市兩層實(shí)現(xiàn)的定義,這里將解決方案命名為“NetShop”,在數(shù)據(jù)庫(kù)設(shè)計(jì)和命名上也做一些改進(jìn)。9.2.2數(shù)據(jù)實(shí)體層實(shí)現(xiàn)

數(shù)據(jù)實(shí)體層(DML,DataModelLayer)主要功能是實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)實(shí)體和實(shí)體關(guān)系表到應(yīng)用程序?qū)ο蟮挠成?。?shù)據(jù)庫(kù)中有名為“Users”的實(shí)體表,用來(lái)存儲(chǔ)注冊(cè)用戶的相關(guān)信息。打開(kāi)VS2005,創(chuàng)建一個(gè)新網(wǎng)站,新建名為“Model”的文件夾,命名空間為“NetShop.Model”,在該文件夾下添加類庫(kù)文件User.cs,創(chuàng)建用戶類。相應(yīng)代碼編寫如下:

usingSystem;

namespaceNetShop.Model

{

//<summary>

//實(shí)體類Users(屬性說(shuō)明自動(dòng)提取數(shù)據(jù)庫(kù)字段的描述信息)

//</summary>

[Serializable]

publicclassUsers

{

publicUsers()

{}

#regionModel

privateint_s_id; //用戶ID

privatestring_s_name; //用戶名稱

privatestring_s_password; //用戶密碼

privatestring_s_qq; //用戶QQ

privatestring_s_email; //Email

privatestring_s_phone; //聯(lián)系電話

privatestring_s_address; //通信地址

privatestring_s_sex;//性別

privatestring_s_idcard; //身份證號(hào)

privateDateTime?_s_date; //出生日期

privatestring_s_answer; //密碼答案

privatestring_s_question; //密碼問(wèn)題

privateint_s_type; //用戶類型

privatestring_s_photo; //用戶圖片

privateint?_s_adminid;

//<summary>

//用戶ID

//</summary>

publicints_id

{

set{_s_id=value;}

get{return_s_id;}

}

//<summary>

//用戶名稱

//</summary>

publicstrings_name

{

set{_s_name=value;}

get{return_s_name;}

}

//<summary>

//用戶密碼

//</summary>

publicstrings_password

{

set{_s_password=value;}

get{return_s_password;}

}

//<summary>

//用戶QQ

//</summary>

publicstrings_qq

{

set{_s_qq=value;}

get{return_s_qq;}

}

//<summary>

//Email

//</summary>

publicstrings_email

{

set{_s_email=value;}

get{return_s_email;}

}

//<summary>

//聯(lián)系電話

//</summary>

publicstrings_phone

{

set{_s_phone=value;}

get{return_s_phone;}

}

//<summary>

//通信地址

//</summary>

publicstrings_address

{

set{_s_address=value;}

get{return_s_address;}

}

//<summary>

//性別

//</summary>

publicstrings_sex

{

set{_s_sex=value;}

get{return_s_sex;}

}

//<summary>

//身份證號(hào)

//</summary>

publicstrings_idcard

{

set{_s_idcard=value;}

get{return_s_idcard;}

}

//<summary>

//出生日期

//</summary>

publicDateTimes_date//這里的?表示該屬性可以為空

{

set{_s_date=value;}

get{return_s_date;}

}

//<summary>

//密碼答案

//</summary>

publicstrings_answer

{

set{_s_answer=value;}

get{return_s_answer;}

}

//<summary>

//密碼問(wèn)題

//</summary>

publicstrings_question

{

set{_s_question=value;}

get{return_s_question;}

}

//<summary>

//用戶類型

//</summary>

publicint?s_type

{

set{_s_type=value;}

get{return_s_type;}

}

//<summary>

//用戶圖片

//</summary>

publicstrings_photo

{

set{_s_photo=value;}

get{return_s_photo;}

}

//<summary>

//

//</summary>

publicint?s_adminid

{

set{_s_adminid=value;}

get{return_s_adminid;}

}

#endregionModel

}

}9.2.3數(shù)據(jù)訪問(wèn)層實(shí)現(xiàn)

當(dāng)用戶注冊(cè)時(shí),會(huì)向Users表插入一條記錄。在本系統(tǒng)中,數(shù)據(jù)訪問(wèn)層(IDAL,DataAccessLayer)的實(shí)現(xiàn)分成以下三個(gè)步驟:

·定義對(duì)象接口類。

·實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)接口類。

·定義數(shù)據(jù)工廠類創(chuàng)建對(duì)象接口。

1.定義對(duì)象接口類

在解決方案中創(chuàng)建文件夾“IDAL”,并定義此文件夾下命名空間為“NetShop.IDAL”、名為IUsers的接口。這樣做是為了讓數(shù)據(jù)訪問(wèn)層易于替換并支持其他數(shù)據(jù)庫(kù),使用接口來(lái)強(qiáng)制自己實(shí)現(xiàn)整個(gè)數(shù)據(jù)訪問(wèn)類的結(jié)構(gòu)。代碼如下:

usingSystem;

usingSystem.Data;

namespaceNetShop.IDAL

{

//<summary>

//接口層IUsers的摘要說(shuō)明

//</summary>

publicinterfaceIUsers

{

#region成員方法

//<summary>

//得到最大ID

//</summary>

intGetMaxId();

//<summary>

//是否存在該記錄

//</summary>

boolExists(ints_id);

//<summary>

//增加一條數(shù)據(jù)

//</summary>

intAdd(NetShop.Model.Usersmodel);

//<summary>

//更新一條數(shù)據(jù)

//</summary>

boolUpdate(NetShop.Model.Usersmodel);

//<summary>

//刪除一條數(shù)據(jù)

//</summary>

boolDelete(ints_id);

//<summary>

//得到一個(gè)對(duì)象實(shí)體

//</summary>

NetShop.Model.UsersGetModel(ints_id);

//<summary>

//獲得數(shù)據(jù)列表

//</summary>

DataSetGetList(stringstrWhere);

//<summary>

//獲得前幾行數(shù)據(jù)

//</summary>

DataSetGetList(intTop,stringstrWhere,stringfiledOrder);

//<summary>

//獲得數(shù)據(jù)列表

//</summary>

intGetUser(stringstrWhere);

//<summary>

//修改基本信息

//</summary>

//<paramname="model"></param>

//<returns></returns>

boolUpdatajiben(NetShop.Model.Usersmodel);

//<summary>

//修改問(wèn)題答案

//</summary>

//<paramname="model"></param>

//<returns></returns>

boolUpdataQuestion(NetShop.Model.Usersmodel);

//<summary>

//修改密碼

//</summary>

//<paramname="model"></param>

//<returns></returns>

boolUpdatapassword(NetShop.Model.Usersmodel);

#endregion成員方法

}

}從上述代碼上看,接口沒(méi)有任何實(shí)現(xiàn)代碼,它的根本目的在于讓我們知道實(shí)現(xiàn)它的類應(yīng)該具有的結(jié)構(gòu)。這種方式對(duì)問(wèn)題的理解更加直觀,但是在業(yè)務(wù)邏輯層上要求能夠訪問(wèn)接口實(shí)現(xiàn)類中的所有方法。要實(shí)現(xiàn)這個(gè)目的,可以根據(jù)web.config文件中的配置,結(jié)合反射來(lái)加載數(shù)據(jù)訪問(wèn)類并將其緩存。在數(shù)據(jù)工廠中,DataAccess類中CreateUsers的靜態(tài)方法實(shí)現(xiàn)了這個(gè)功能。

2.實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)接口類

在解決方案中,創(chuàng)建名為“SQLServerDAL”的文件夾,命名空間名為NetShop.SQLServerDAL,在此中建立名為“Users.cs”的類,實(shí)現(xiàn)IUsers接口。代碼如下:

usingSystem;

usingSystem.Data;

usingSystem.Text;

usingSystem.Data.SqlClient;

usingNetShop.IDAL;

usingNetShop.DBUtility;//請(qǐng)先添加引用

namespaceNetShop.SQLServerDAL

{

//<summary>

//數(shù)據(jù)訪問(wèn)類Users

//</summary>

publicclassUsers:IUsers

{

publicUsers(){}

#region成員方法

//<summary>

//增加一條數(shù)據(jù)

//</summary>

publicintAdd(NetShop.Model.Usersmodel)

{

StringBuilderstrSql=newStringBuilder();

strSql.Append("insertintoNetShop_Users(");

strSql.Append("s_name,s_password,s_qq,s_email,s_phone,s_address,

s_sex,s_idcard,s_date,s_answer,s_question,s_type,s_photo,s_adminid)");

strSql.Append("values(");

strSql.Append("@s_name,@s_password,@s_qq,@s_email,@s_phone,

@s_address,@s_sex,@s_idcard,@s_date,@s_answer,@s_question,@s_type,

@s_photo,@s_adminid)");

strSql.Append(";select@@IDENTITY");

SqlParameter[]parameters={

newSqlParameter("@s_name",SqlDbType.VarChar,16),

newSqlParameter("@s_password",SqlDbType.VarChar,24),

newSqlParameter("@s_qq",SqlDbType.VarChar,12),

newSqlParameter("@s_email",SqlDbType.VarChar,30),

newSqlParameter("@s_phone",SqlDbType.VarChar,15),

newSqlParameter("@s_address",SqlDbType.VarChar,100),

newSqlParameter("@s_sex",SqlDbType.VarChar,2),

newSqlParameter("@s_idcard",SqlDbType.VarChar,20),

newSqlParameter("@s_date",SqlDbType.DateTime),

newSqlParameter("@s_answer",SqlDbType.VarChar,100),

newSqlParameter("@s_question",SqlDbType.VarChar,100),

newSqlParameter("@s_type",SqlDbType.Int,4),

newSqlParameter("@s_photo",SqlDbType.VarChar,100),

newSqlParameter("@s_adminid",SqlDbType.Int,4)};

parameters[0].Value=model.s_name;

parameters[1].Value=model.s_password;

parameters[2].Value=model.s_qq;

parameters[3].Value=model.s_email;

parameters[4].Value=model.s_phone;

parameters[5].Value=model.s_address;

parameters[6].Value=model.s_sex;

parameters[7].Value=model.s_idcard;

parameters[8].Value=model.s_date;

parameters[9].Value=model.s_answer;

parameters[10].Value=model.s_question;

parameters[11].Value=model.s_type;

parameters[12].Value=model.s_photo;

parameters[13].Value=model.s_adminid;

objectobj=DbHelperSQL.GetSingle(strSql.ToString(),parameters);

if(obj==null)

{

return1;

}

else

{

returnConvert.ToInt32(obj);

}

}

}

3.定義數(shù)據(jù)工廠類創(chuàng)建對(duì)象接口

在解決方案中,創(chuàng)建名為“DALFactory”的文件夾,命名空間名為NetShop.DALFactory,在此中建立名為“DataAccess.cs”的類來(lái)定義數(shù)據(jù)工廠,以實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)。代碼如下:

usingSystem;

usingSystem.Reflection;

usingSystem.Configuration;

namespaceNetShop.DALFactory

{

//<summary>

//AbstractFactorypatterntocreatetheDAL

//</summary>

publicsealedclassDataAccess

{

privatestaticreadonlystringAssemblyPath=ConfigurationManager.AppSettings["DAL"];

//<summary>

//創(chuàng)建Users數(shù)據(jù)層接口

//</summary>

publicstaticNetShop.IDAL.IUsersCreateUsers()

{

stringClassNamespace=AssemblyPath+".Users";

objectobjType=CreateObject(AssemblyPath,ClassNamespace);

return(NetShop.IDAL.IUsers)objType;

}

}

}9.2.4業(yè)務(wù)邏輯層實(shí)現(xiàn)

為了實(shí)現(xiàn)對(duì)用戶注冊(cè)信息的插入,業(yè)務(wù)邏輯層(BLL,BusinessLogicLayer)需要調(diào)用來(lái)自數(shù)據(jù)訪問(wèn)層的方法,并將相關(guān)值作為參數(shù)傳遞給它。BLL命名空間下的USers類中的Add方法實(shí)現(xiàn)了這一過(guò)程。代碼如下所示:

usingNetShop.IDAL;

usingNetShop.DBUtility;

usingSystem.Text;

namespaceNetShop.BLL

{

//<summary>

//業(yè)務(wù)邏輯類Users的摘要說(shuō)明

//</summary>

publicclassUsers

{

//定義訪問(wèn)用戶對(duì)象的接口變量IUsers

privatereadonlyIUsersdal=DataAccess.CreateUsers();

publicUsers()

{}

#region成員方法

//<summary>

//增加一條數(shù)據(jù)

//</summary>

publicintAdd(NetShop.Model.Usersmodel)

{

returndal.Add(model);

}

}

}

這個(gè)方法完成了許多完全適合于業(yè)務(wù)邏輯層,并且不希望留給用戶界面層或數(shù)據(jù)訪問(wèn)層的工作。9.2.5用戶接口層實(shí)現(xiàn)

通過(guò)對(duì)業(yè)務(wù)邏輯進(jìn)行封裝后,用戶接口層(UI,UserInterface)的設(shè)計(jì)就主要在頁(yè)面設(shè)計(jì)和參數(shù)的傳遞了。用戶接口層上可以在不知道應(yīng)用程序其他部分細(xì)節(jié)的情況下調(diào)用業(yè)務(wù)邏輯層的方法來(lái)實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯,達(dá)到應(yīng)用層和業(yè)務(wù)邏輯層的協(xié)同工作。其部分代碼

如下:

publicpartialclassUiControl_user_add:System.Web.UI.UserControl

{

NetShop.BLL.Usersus=newNetShop.BLL.Users();

NetShop.Model.Usersuser=newNetShop.Model.Users();

stringimage="UpFiles/UserImages/none.gif";

protectedvoidBtnSubmit_Click(objectsender,EventArgse)

{

if(upImage())

{

user.s_name=tb_user_nam.Text.Trim();

user.s_password=Util.getpwd(tb_password.Text.Trim().ToString());

user.s_qq=tb_password.Text.Trim();

user.s_email=tb_email.Text.Trim();

user.s_phone=tb_phto.Text.Trim();

user.s_address=tb_adrees.Text.Trim();

user.s_sex=tb_sex.SelectedValue.ToString();

user.s_idcard=tb_user_id.Text.Trim();

user.s_date=DateTime.Now;

user.s_photo=image;

if(us.Add(user)>0)

JavaScript.alert("注冊(cè)成功");

else

JavaScript.alert("注冊(cè)失敗");

}

else

{

JavaScript.alert("頭像上傳失敗");

}

}

privateboolupImage()

{

溫馨提示

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