二、entityclass
entityclass中的每一个文件对应数据库中的一张表,对应其字段,以及对表的操作的封装,如查询,增加、删除等。
所有的entityclass继承了一个基类baseentity,基类的代码如下,主要是一些接口
imports system.data
namespace entityclass
public class baseentity
public strsql as string
public database as data.datafactory
public dt as datatable
构造函数
public sub new()
me.database = new data.datafactory
me.dt = new datatable
end sub
应该做成抽象的abstract
public function load() as integer
end function
public function creat() as integer
end function
public function updata() as integer
end function
public function delete() as integer
end function
public function getdataontable() as datatable
me.dt = me.database.datatableresult(me.strsql)
return dt
end function
public function getoneobj() as object
return me.database.readonelog(me.strsql)
end function
public function executesql() as integer
return me.database.executenonquery(me.strsql)
end function
end class
end namespace
这里以对用户表的操作为例,来说明entityclass的结构,代码如下:
imports system.data
namespace entityclass
public class s_user
inherits baseentity
const arraylength = 100
public id_i as string
用户名
public username_s as string
用户密码
public password_s as string
add by gb 20050725
dim array1(arraylength) as string
dim array2(arraylength, 1) as string
dim sqlarray(arraylength, 1) as string
dim len1 as integer = 0
dim len2 as integer = 0
dim sqllen as integer = 0
private mydataset as new dataset
对array2赋初值
private sub setarray2()
array2(0, 0) = “id_i”
array2(1, 0) = “username_s”
array2(2, 0) = “password_s”
array2(0, 1) = id_i
array2(1, 1) = username_s
array2(2, 1) = password_s
end sub
通过读取数据库中的列名,对array1赋值
private sub setdbcoloum()
loaddynamicdataset(mydataset)
dim m_i as integer = 0
dim m_len as integer = 0
m_len = me.mydataset.tables.item(0).select.length()
m_len = me.mydataset.tables.item(0).columns.count
for m_i = 0 to arraylength
if not me.mydataset.tables.item(0).columns(m_i) is nothing then
m_len = m_len + 1
end if
next
msgbox(“m_len” + m_len.tostring)
for m_i = 0 to m_len – 1
array1(m_i) = me.mydataset.tables.item(0).columns(m_i).columnname.tostring
next
array1(0) = me.mydataset.tables.item(0).columns(0).columnname.tostring
array1(0) = “id_i”
array1(1) = “password_s”
end sub
通过array1和array2的处理,对sqlarray赋值;最后的结果是sqlarray中,依次对应数据库中的列的值
public function setdynamiccoloum()
setarray2()
setdbcoloum()
len1 = 0
len2 = 0
sqllen = 0
dim i as integer
dim j as integer = 0
for i = 0 to arraylength
if not array1(i) is nothing then
len1 = len1 + 1
else
exit for
end if
next
msgbox(“len1=” + len1.tostring)
for i = 0 to arraylength
if not array2(i, 0) is nothing then
len2 = len2 + 1
else
exit for
end if
next
msgbox(“len2=” + len2.tostring)
for i = 0 to len1 – 1
for j = 0 to len2 – 1
if array1(i) = array2(j, 0) then
sqlarray(i, 0) = array2(j, 0)
sqlarray(i, 1) = array2(j, 1)
exit for
end if
next
next
for i = 0 to arraylength
if not sqlarray(i, 0) is nothing then
sqllen = sqllen + 1
else
exit for
end if
next
for i = 0 to sqllen – 1
msgbox(sqlarray(i, 1))
next
msgbox(sqlarray(0))
msgbox(sqlarray(1))
end function
得到对应数据库中的表的信息
public sub loaddynamicdataset(byref dataset as dataset)
mybase.strsql = “select * from s_user”
mybase.database.selectsqlsrvrows(dataset, mybase.strsql)
end sub
add end
public function count() as integer
return convert.toint32(mybase.database.readonelog(“select count(*) from s_user”))
end function
public sub new()
todo: 在此处添加构造函数逻辑
me.init()
setdynamiccoloum()
end sub
public function init()
me.id_i = “”
me.username_s = “”
me.password_s = “”
end function
根据id得到一条用户信息
public shadows function load() as integer
mybase.strsql = “select * from s_user where id_i=” + me.id_i
dim dt as datatable = mybase.database.datatableresult(strsql)
if (dt.rows.count > 0) then
if findinsqlarray(“username_s”, sqlarray) > 0 then
me.username_s = dt.rows(0)(“username_s”).tostring()
end if
if findinsqlarray(“password_s”, sqlarray) > 0 then
password_s = dt.rows(0)(“password_s”).tostring()
end if
me.username_s = dt.rows(0)(“username_s”).tostring()
me.password_s = dt.rows(0)(“password_s”).tostring()
return dt.rows.count
else
return 0
end if
end function
public function getuser(byval username as string, byval password as string) as integer
msgbox(3)
mybase.strsql = “select * from s_user where username_s=” + username + ” and password_s=” + password + “”
dim dt as datatable = mybase.database.datatableresult(strsql)
if (dt.rows.count > 0) then
me.id_i = dt.rows(0)(“id_i”).tostring()
me.username_s = dt.rows(0)(“username_s”).tostring()
me.password_s = dt.rows(0)(“password_s”).tostring()
return dt.rows.count
else
return 0
end if
end function
添加用户
public shadows function creatuser() as integer
dim i as integer
dim col as string
dim colval as string
for i = 1 to sqllen – 2
col = col + sqlarray(i, 0) + “,”
colval = colval + sqlarray(i, 1) + “,”
next
col = col + sqlarray(sqllen – 1, 0)
colval = colval + sqlarray(sqllen – 1, 1)
mybase.strsql = “insert into s_user (” + col + “)” + “values (” + colval + “)”
mybase.strsql = “insert into s_user (” + _
“username_s,password_s” + “)” + _
“values (” + username_s + “,” + password_s + “)”
msgbox(“sql2=” + strsql)
return mybase.database.executenonquery(mybase.strsql)
end function
更新用户
public shadows function updata() as integer
dim i as integer
dim str as string
for i = 1 to sqllen – 2
str = str + sqlarray(i, 0) + “=” + sqlarray(i, 1) + “,”
next
str = str + sqlarray(sqllen – 1, 0) + “=” + sqlarray(sqllen – 1, 1) + “”
mybase.strsql = “update s_user set ” + str + ” where id_i=” + me.id_i
msgbox(strsql)
mybase.strsql = “update s_user set username_s=” + me.username_s + “,password_s=” + me.password_s + ” where id_i=” + me.id_i
return mybase.database.executenonquery(mybase.strsql)
end function
删除用户
public shadows function delete() as integer
mybase.strsql = “delete from s_user where id_i=” + me.id_i.tostring()
return mybase.database.executenonquery(mybase.strsql)
end function
public sub loadusers(byref dataset as dataset)
mybase.strsql = “select * from s_user”
mybase.database.selectsqlsrvrows(dataset, mybase.strsql)
end sub
public function setentity(byref myparameter as business.login.userparameter) as integer
try
me.id_i = myparameter.get_id
me.username_s = myparameter.get_username
me.password_s = myparameter.get_password
setdynamiccoloum()
catch ex as exception
return 0
end try
return 1
end function
public function findinsqlarray(byval prop as string, byval sqlarray(,) as string) as integer
dim m as integer = 0
for m = 0 to arraylength
if prop.equals(sqlarray(m, 0)) then
return 1
end if
next
return 0
end function
根据sql语句查询
public function getobjbyqry(byval str as string, byref mp() as business.login.userparameter) as integer
mybase.strsql = “select * from ” + “s_user ” + str
dim dt as datatable = mybase.database.datatableresult(strsql)
dim m_i as integer
redim mp(dt.rows.count – 1)
if (dt.rows.count > 0) then
for m_i = 0 to dt.rows.count() – 1
mp(m_i) = new business.login.userparameter
if findinsqlarray(“username_s”, sqlarray) > 0 then
mp(m_i).set_username(dt.rows(m_i)(“username_s”).tostring())
end if
if findinsqlarray(“password_s”, sqlarray) > 0 then
mp(m_i).set_password(dt.rows(0)(“password_s”).tostring())
end if
next
else
return 0
end if
end function
end class
end namespace
可以看到,代码中定义了一系列的属性值,对应于用户表中的各个字段。还有对如添加用户,删除用户等各种操作的封装,调用了data层中的方法,并且向以后将要涉及到的business层提供了接口。所有的sql语句都是在这里拼写的。
