999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

DotNetNuke中TableAdapter控件的研究

2010-04-29 00:00:00王時繪,周怡
電腦知識與技術(shù) 2010年11期

摘要:該文以一個對數(shù)據(jù)庫的查詢?yōu)榫唧w實(shí)例,研究了DotNetNuke中數(shù)據(jù)源控件TableAdapter,以及該控件訪問數(shù)據(jù)庫的具體細(xì)節(jié),并解決了實(shí)際應(yīng)用中出現(xiàn)的使用TableAdapter訪問數(shù)據(jù)庫時可能出現(xiàn)的超時問題。

關(guān)鍵詞:dotNetNuke;tableAdapter;visualStudio;訪問數(shù)據(jù)庫超時

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2010)11-2576-02

DotNetNuke(簡稱DNN)由于其開源性和開發(fā)快速,被大量企業(yè)所應(yīng)用。其開發(fā)在Visual Studio中進(jìn)行,開發(fā)中可使用大量控件,極大的簡化了我們的開發(fā),但同時也有一些不足。例如TableAdapter控件,我們通過SQL Server2005的SQL Server profiler對其訪問數(shù)據(jù)庫的工作進(jìn)行跟蹤時發(fā)現(xiàn),DNN中TableAdapter的查詢方法訪問數(shù)據(jù)庫的時間均為30s,一旦超過30s訪問就會終止。針對該問題,本文給出了解決方案。對更好了解和進(jìn)行DNN的開發(fā),具有較大的參考價(jià)值。

1 什么是DotNetNuke

DotNetNuke(簡稱DNN)是一個免費(fèi)、開源、可擴(kuò)展、幾近完美的內(nèi)容管理系統(tǒng),同時DNN提供了強(qiáng)大的頁面管理功能(皮膚)。DNN可以廣泛應(yīng)用于商務(wù)網(wǎng)站、企業(yè)內(nèi)網(wǎng)和外網(wǎng)網(wǎng)站、在線內(nèi)容發(fā)布網(wǎng)站,是建立在微軟ASP.NET平臺上的一套WEB應(yīng)用框架。

2 TableAdapte控件

TableAdapter 提供應(yīng)用程序和數(shù)據(jù)庫之間的通信。TableAdapter連接到數(shù)據(jù)庫,執(zhí)行查詢或存儲過程,并返回用返回?cái)?shù)據(jù)填充的新數(shù)據(jù)表或是用返回?cái)?shù)據(jù)填充現(xiàn)有DataTable。 TableAdapter 通常包含 Fill 和 Update 方法,用于獲取和更新數(shù)據(jù)庫中的數(shù)據(jù)。

3 使用TableAdapte控件訪問數(shù)據(jù)庫

本實(shí)例采用微軟的C#語言進(jìn)行系統(tǒng)應(yīng)用開發(fā),使用MicroSoft SQL 2005做數(shù)據(jù)庫, 利用IIS服務(wù)器軟件來解釋執(zhí)行。下面說明實(shí)例的具體實(shí)現(xiàn)。

由于只是一個簡單查詢功能,因此數(shù)據(jù)表Student只建立五個有關(guān)學(xué)生基本信息的字段,建表如下:

首先,在DataSet中新建一個名為TableAdapter_searchStudent的TableAdapter,并且根據(jù)查詢的需要給TableAdapter_search添加一個select方法,方法名為:GetData_getstudent,方法為:

SELECT number, name, sex, age, class

FROM Student

WHERE (number LIKE '%' + @number + '%') AND (name LIKE '%' + @name + '%')

雖然我們只寫了這樣一些簡單的SQL語句,但實(shí)際上VisualStudio為我們做了許多的幕后工作。打開“類視圖”,我們可以在節(jié)點(diǎn)找到該查詢方法的具體定義,如下:

private void InitCommandCollection() {

this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];

this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();

this._commandCollection[0].Connection = this.Connection;

this._commandCollection[0].CommandText = \"SELECT number, name, sex, age, class\\r\FROM Student\\r\WHERE (number LIKE \\'%\\' + @num\" +\"ber + \\'%\\') AND (name LIKE \\'%\\' + @name + \\'%\\')\";

this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;

this._commandCollection[0].Parameters.Add(newglobal::System.Data.SqlClient.SqlParameter(\"@number\",global::System.Data.SqlDbType.VarChar,10,global::System.Data.ParameterDirection.Input, 0, 0, \"number\", global::System.Data.DataRowVersion.Current, 1, 1, \"\", \"\", \"\"));

this._commandCollection[0].Parameters.Add(newglobal::System.Data.SqlClient.SqlParameter(\"@name\",global::System.Data.SqlDbType.VarChar,50,global::System.Data.ParameterDirection.Input, 0, 0, \"name\", global::System.Data.DataRowVersion.Current, 1, 1, \"\", \"\", \"\"));}

public virtual DataSetStudent.TableAdapter_searchStudentDataTable GetData_getstudent(string number, string name) {

this.Adapter.SelectCommand = this.CommandCollection[0];

if ((number == 1)) {

throw new global::System.ArgumentNullException(\"number\");}

else {this.Adapter.SelectCommand.Parameters[0].Value = ((string)(number));}

if ((name == 1)) {

throw new global::System.ArgumentNullException(\"name\");}

else {this.Adapter.SelectCommand.Parameters[1].Value = ((string)(name));}

DataSetStudent.TableAdapter_searchStudentDataTable dataTable = new DataSetStudent.TableAdapter_searchStudentDataTable();

this.Adapter.Fill(dataTable);

return dataTable;}

以上代碼就是對GetData_getstudent方法的具體定義,這些代碼就是在我們利用圖形化界面進(jìn)行配置的時候自動生成的,可見使用控件為我們的開發(fā)節(jié)省了大量的時間。當(dāng)然,我們也可以根據(jù)需要對這些代碼進(jìn)行修改。比如文章開始提到的連接數(shù)據(jù)庫超時的問題。要修改此方法訪問數(shù)據(jù)庫的時間,就必須對訪問數(shù)據(jù)庫的時間進(jìn)行重新定義,其他的代碼均不用改變。因此我們將倒數(shù)第二句代碼改為如下代碼:

try

{

this.Adapter.SelectCommand.CommandTimeout = 您希望的時間;

this.Adapter.Fill(dataTable);

}

catch (System.Exception ex)

{ }

做以上修改之后,該方法訪問數(shù)據(jù)庫的時間就會更改為您的設(shè)置,而不是默認(rèn)的30s了.更主要的是,在這里做修改不會影響我們對控件的使用,就不會對我們的開發(fā)帶來影響。

3 總結(jié)

總而言之,利用Visual Studio進(jìn)行DNN模塊的開發(fā)時,要關(guān)注DNN的內(nèi)部機(jī)制以及它的一些默認(rèn)設(shè)置。就如本文中的TableAdapter,DNN就為它設(shè)置了默認(rèn)的訪問數(shù)據(jù)庫的時間。該文所提供的只是一個最簡單的解決方案,但是它也建立在對DNN內(nèi)部機(jī)制的理解和測試之上,DNN的內(nèi)部機(jī)制是很復(fù)雜的,我們花費(fèi)時間做更多的研究,并在實(shí)際中留心觀察和發(fā)現(xiàn)。

參考文獻(xiàn):

[1] 沃勒.DotNetNuke 4 高級編程[M].北京:清華大學(xué)出版社,2008.

[2] Young L.DotNetNuke For Dummies[M].吉林:吉林長白山出版社,2007.

[3] Archer T.C#技術(shù)揭秘[M].北京:機(jī)械工業(yè)出版社,2007.

[4] 鄭宇軍.C# 2.0程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2005.

主站蜘蛛池模板: 日本三级精品| 视频二区欧美| 99精品高清在线播放| 久久久久无码精品| 最新午夜男女福利片视频| 亚洲国产成人精品无码区性色| 麻豆AV网站免费进入| 69综合网| 中文字幕在线一区二区在线| 精品国产一区91在线| 全色黄大色大片免费久久老太| 性色在线视频精品| 在线a视频免费观看| 成人福利在线视频| 成人无码区免费视频网站蜜臀| 亚洲精品第一页不卡| 免费激情网址| 手机在线看片不卡中文字幕| 丰满人妻中出白浆| 国产白浆视频| 真人高潮娇喘嗯啊在线观看| 亚洲无码精彩视频在线观看| 日本人妻丰满熟妇区| 欧美自慰一级看片免费| 被公侵犯人妻少妇一区二区三区 | 青青操国产| 亚洲欧洲日产无码AV| 高h视频在线| 国产亚洲精品无码专| 免费无码又爽又刺激高| 色噜噜狠狠狠综合曰曰曰| 国产丝袜丝视频在线观看| 高h视频在线| 国产精品欧美激情| 亚洲欧美成aⅴ人在线观看 | 亚洲成aⅴ人片在线影院八| 国产成人综合亚洲欧美在| 欧美五月婷婷| 免费一级毛片在线观看| 午夜啪啪网| 伊人成人在线视频| 精品国产自在现线看久久| 国产在线观看精品| 亚洲欧洲免费视频| 国产精品妖精视频| 亚洲高清无在码在线无弹窗| 91精品国产一区| 国产99久久亚洲综合精品西瓜tv| 亚洲A∨无码精品午夜在线观看| 乱系列中文字幕在线视频 | 中文字幕永久在线观看| 国产欧美中文字幕| 秘书高跟黑色丝袜国产91在线| 色成人综合| 欧美日韩午夜| 免费在线a视频| 波多野结衣一区二区三视频| 亚洲精品成人片在线观看| 亚洲国产在一区二区三区| 日韩无码黄色| 成人毛片在线播放| 无码一区中文字幕| 2024av在线无码中文最新| 国产精品观看视频免费完整版| 四虎永久在线视频| 亚洲区一区| 美美女高清毛片视频免费观看| 高h视频在线| 欧美 亚洲 日韩 国产| 波多野结衣亚洲一区| 午夜日韩久久影院| 亚洲综合欧美在线一区在线播放| 中文字幕免费播放| 中文字幕 91| 2021国产精品自产拍在线| 亚洲精品在线影院| 性激烈欧美三级在线播放| 久久精品国产亚洲AV忘忧草18| 99九九成人免费视频精品| 国产jizz| 综合网久久| 又大又硬又爽免费视频|