機房重構 泛型

2021-07-11 09:49:08 字數 3619 閱讀 3957

1、datatable

是乙個臨時儲存資料的網格虛擬表(表示記憶體中資料的乙個表。)。datatable是ado dot net 庫中的核心物件。它可以被應用在 vb 和 asp 上。它無須**就可以簡單的繫結資料庫。它具有微軟風格的使用者介面。

應用

''' ''' 執行查詢的操作,(無參)

'''

''' 需要執行語句,一般是sql語句,也有儲存過程

''' 判斷sql語句的型別,一般都不是儲存過程

''' 查詢到的**

'''

public function executeno(byval cmdtext as string, byval cmdtype as commandtype) as datatable

cmd.commandtext = cmdtext

cmd.commandtype = cmdtype '命令型別是儲存過程

cmd.connection = conn

dim adaptor as sqlclient.sqldataadapter '讀取資料庫中的表

dim adataset as new dataset

adaptor = new sqldataadapter(cmd)

adaptor.fill(adataset)

return adataset.tables(0)

call closeconnection(conn)

call closecmd(cmd)

end function

2、泛型

泛型是

程式語言

的一種特性。允許程式設計師在強型別程式語言中編寫**時定義一些可變部分,那些部分在使用前必須作出指明。各種程式語言和其

編譯器、執行環境對泛型的支援均不一樣。將型別引數化以達到**復用提高軟體開發工作效率的一種資料型別。

泛型類是引用型別,是堆物件,主要是引入了型別引數這個概念。

應用:

public class querygetcashdal : implements idal.querygetcashidal '實現介面

public function querygetcashidal(getcash as entity.querygetcash) as list(of entity.querygetcash) implements idal.querygetcashidal.querygetcashidal

dim sqlhelperobject as new sqlhelper.loginsqlhelper

dim dt as datatable '定義接受datatable的dt

dim sql as string

dim mylist as new list(of entity.querygetcash) '定義接受datatable轉換後list

'將實體層欄位賦值給引數

dim sqlparams as sqlparameter() =

'查詢語句

sql = "select * from t_rechargeinfo where rechargedate>=@startdate and rechargedate<=@enddate"

'傳到sqlhelper層,返回內容給dt

dt = sqlhelper.loginsqlhelper.getdatatable(sql, commandtype.text, sqlparams)

'判斷datatable表中是否有資料

if (dt.rows.count > 0) then

' 將datatable轉換成泛型

mylist = converthelper.converthelper.converttolist(dt, mylist)

return mylist

else

throw new exception("沒有記錄!")

return nothing

end if

end function

end class

module converthelper

public class converthelper

public shared function converttolist(of t as )(dt as datatable, ts as ilist(of t))

dim type as type = gettype(t) '獲得t的型別

dim strtemp as string = string.empty '定義乙個臨時變數

'遍歷表中所有行數

for each dr as datarow in dt.rows

'定義型別變數act獲取動態建立物件t的型別

dim act as t = if((nothing is nothing), activator.createinstance(of t)(), nothing)

'引用反射表示可獲得物件的所有屬性組成的集合

dim propertys as propertyinfo() = act.[gettype]().getproperties()

'定義array變數,接收propertys中含有的屬性,並提供對屬性propertys元資料訪問

dim array as propertyinfo() = propertys

dim intcount as integer = 0 '定義計數初始為0

'遍歷所有物件屬性

while intcount < array.length 'length表示所有維數中元素的總和

dim pr as propertyinfo = array(intcount) 'pr表示元素中含有的屬性,並提供對資料訪問

strtemp = pr.name '列名=物件的屬性名

if dt.columns.contains(strtemp) then '判斷此屬性是否設定函式

if pr.canwrite then '該屬性是否可寫

dim value as object = dr(strtemp)

if value isnot dbnull.value then

pr.setvalue(act, value, nothing) '賦值給物件的屬性

end if

end if

end if

intcount += 1 '每條記錄中欄位+1

continue while

end while

'新增物件到泛型集合中

ts.add(act)

next

return ts

end function

end class

end module

C 泛型《機房重構》

原理 實體類即資料庫的對映,因此實體類中的屬性和資料庫表中的字段是相對應的。把datatable中的每一行記錄視為乙個實體類,把其中的字段讀取出來,存放到實體類的屬性中,再把所有的實體類存在泛型集合中。因此,datatable中有多少個記錄,泛型集合中就有多少個實體類,每個實體類的屬性和datata...

機房重構總結

萬事開頭難,也不知道是哪位大師說的,這次機房的重構讓我深刻的體會到了這句話的含義。剛剛接觸分層,對分層也不理解,照著三層登陸的例項敲乙個登陸出來,然後看著網上的包圖,就想著加乙個抽象工廠,簡直無從下手,不斷的看書,也請教前人。到最後看抽象工廠的設計模式都不用看目錄,直接翻開了。無從下手,不知所措,這...

機房重構 報表

從第一版的機房收費系統就有報表的使用,當時確實是第一次接觸到報表這個東西,因為vb中沒有報表,所以當初呼叫的是其他的報表工具。這次機房重構中再次用到報表,看過一些關於機房重構的部落格,了解到vs平台有自帶報表功能,所以這一次嘗試使用。1 關於vs平台中的報表,第一步還是先建立資料集 2 修改自己所需...