.net 通用数据库概念

一: asp.net通用数据库访问层源码之公用属性

  公共属性

  公共属性在CBaseConfig类别中,可以在程序中可以直接以CBaseConfig.appRoot取得)

  1. appRoot

  string, 应用程序物理路径(格式:c:\myDir\)

  2. VirtualPath

  string,应用程序虚拟路径(格式:/myWeb/)

  3. EncryptKey

  string,用于加密资料的密钥

  4. IsCache

  bool, true/false(default)从数据库中取的数据是否使用cache。

  5. SqlCacheDependPath

  string, 从数据库中取的数据cache依的目录(格式:c:\myDir\)

  6. SmtpServer

  string, 发送e-mail的SMTP服务器名称或IP地址

  7. AllViewCount

  int, 访问系统的总人次数。

  8. DayViewCount

  int, 访问系统的当日人次数。

  9. AppVersion

  String, WEB应用程序当前版本,格式:V版本号.年月日.时分,如V3.20050820.1403,表示版本号是3,最后更新日期是2005/8/20 14:03

  10. EnablePageCache

  bool, true(default)/false使用/不使用页面catch

  11. PageCacheExpiresInSeconds

  int, 页面catch过期时长(秒,default 3600)

  12. EnableSsl

  bool, true/false(default)是否使用SSL加密传送数据

  二: asp.net通用数据库访问层源码之公共函数

  公共函数

  公共方法在CBaseConfig类别中,在程序中直接以CBaseConfig.ReadStting()调用。

  1. OnApplicationStart

  OnApplicationStart (stringprojectDLL)---初始化CbaseConfig类,必须在Global.asax.cs的Application_Start(Objectsender, EventArgs e)中执行

  projectDLL=WEB程序主DLL文件(不含路径),该DLL在每次修改时都要变,一般是WEB项目名的DLL(用于版本计算)

  2. OnApplicationEnd

  OnApplicationEnd()—系统结束时,调用该函数,清除所有资源

  3. AddViewCount

  AddViewCount(string countKey)-- 累加计数值(访问系统的人数)。

  返回累加后的总计数值(AllViewCount=总的计数值,DayViewCount=当日计数值)

  countKey=在系统设定文件(AppSetting.xml)中的计数值的key。

  4. RemoveAllCache

  RemoveAllCache()--清除所有Cache(不清除系统使用的cache(以'PSYS_'开头))

  5. ReadWebConfig

  ReadWebConfig(string key, stringdefaultValue)—从WEB.Config文件中的<appSettings>中取参数值

  key=web.config文件中<appkey=’’>中的key值,

  defaultValue=默认值,如果没有设定则用该值。

  6. ReadAppConfig

  ReadAppConfig(string key, objectdefaultValue)—从系统配置文件(WebFrame.config)中读取参数值

  key=<app key=’’>中的key值,defaultValue=默认值,如果没有设定则用该值

  7. ReadSetting

  ReadSetting(string key, objectdefaultValue)—从系统设定文件(AppSetting.xml)中读取参数值

  key=<app key=’’>中的key值,defaultValue=默认值,如果没有设定则用该值

  8. WriteSetting

  WriteSetting(string key, stringsetting)—将key加入系统配置文件(AppSetting.xml)中(如果没有该key则生成)。(存入后,格式为:<appkey=’’ value=’’/>),成功返回true,失败返回false

  key=<app key=’’>中的key值,defaultValue=默认值,如果没有设定则用该值

  9. SaveSetting

  SaveSetting()—WriteSetting()并没有保存加入的key,当所有key加完后,调用该函数来保存。成功返回true,失败返回false.

  10. GetMessage

  GetMessage(string MsgId, stringLanguageName)—取提示信息内容,该信息放在XML文件中(该文件由配置文件(WebFrame.config)中<appSettings>中key="Web.MsgPath"的值及语言决定,文文件放在Web.MsgPath下,文件名是语言名.xml如zh-CHS.xml)

  MsgId=信息ID,请参考WebFrameMsg.xml

  LanguageName=使用的言语特性(不设定或为空,则使用系统设定zh-CHT),zh-CHT版 ;zh-CHS 简体版;en 英文版 ja-JP 日文版

  11. CreateJSMsg

  CreateJSMsg(string[] MsgIds, string LanguageName, booladdScript)--生成JS显示的讯息(从讯息文件(*.xml)中取),这些讯息在JS函数中使用。

  返回格式:<scriptlanguage='javascript'>S0001="xxx";S0002="xxx";...</script>

  MsgIds=要生成的讯息ID,多个,这些讯息在讯息文件中(如zh-CHS.xml)。

  LanguageName=使用的言语特性(不设定或为空,则使用系统设定zh-CHT),zh-CHT 繁体版 ;zh-CHS 简体版;en 英文版 ja-JP 日文版

  addScript=true(预设):结果加上<scriptlanguage='javascript'></script>

  12. ExecuteJS

  ExecuteJS(string jsCodes)--执行一段JS代码。返回含<script>的jsCodes代码。

  jsCodes=要执行的JS代码,必须是正确的、完整的代码,不含<scriptlanguage='javascript'>

  13. ShowJsMsg

  ShowJsMsg(string msg, string url, boolIsBack)—显示指定的讯息,并返回指定页面。

  msg=要显示的讯息,如果为空则显示no message.

  url=返回的页面url,=null或'':返回上一页面history.go(-1),只有一个数字:返回history.go(-url),以');'或')'结束:url=JS函数,其它:url=返回的页面url

  IsBack= true:返回指定的url页面,false:不返回.

  三: asp.net通用数据库访问层源码

  1.在WEB系统的根目录下建一个存放系统配置文件的目录(如AppConfig),设定为只读,WEB无任何权限(在IIS管理员中设定)。同时建如下子目录:

  (1) data—存放SQL配置文件(如TB_Users.xml)。

  (2) msg—存放系统讯息文件(如zh-CHS.xml)

  (3) log—存放系统错误日志文件,必须有写入权限。

  (4) setting—存放系统设定文件(如AppSetting.xml) ,必须有写入权限。

  2. 设定系统配置文件(WebFrame.config)及Web.config。

  3. 在Global.asax.cs文件中:

  (1) 加入:using WebFrame.Config;

  (2) 在Application_Start()中:

  CBaseConfig.OnApplicationStart(Context.Cache,

  Context.Server.MapPath(Context.Request.Application Path),

  Context.Request.ApplicationPath,”project.dll”);

  (3) 在Session_Start()中:

  CBaseConfig.AddViewCount("App.UserCount"); //计数器+1

  (4) 在Application_Error()和Application_End()中:

  CBaseConfig.OnApplicationEnd();

  4.

  架构

  WebFrame架构目前有以下几个名字空间(以后也许还会扩充):

  1.WebFrame.Base:包含CBaseDAO、CBaseDAOContext、CSecurity、CMail等类别

  2.WebFrame.Config:包含CBaseConfig、CEncrypt、CWebFrameException等类别。

  3. WebFrame.DB:包含所有对数据库操作的类别,请参考CDBConn.doc说明

  4. WebFrame.UserServices:包含对用户数据、权限数据等操作的所有类别。

  5. WebFrame.UserSimple:包含对用户数据、简单权限数据等操作的类别。

  6. WebFrame.UI:包含前端页面使用的公用类别。

  7. WebFrame.File:包含文件上载、下载操作的所有类别

  8. WebFrame.OWC:包含用MS OWC11生成统计图的类别

  其中WebFrame.Config、WebFrame.DB、WebFrame.Base是最基本、也是必须的。

  使用WebFrame来开发WEB项目/项目时,至少分2层(2个项目/项目),业务逻辑层和接口层:

  1.业务逻辑层:包含所有业务逻辑层的类别库(项目/项目),该类别库的所有类别都继承CBaseDAO或CBaseSimpleDAO、CRightDAO类别。类别库中至少包含WebFrame.Base、WebFrame.Config、WebFrame.DB三个名字空间,如果需要用到用户及权限数据,还必须包含WebFrame.UserSimple或 WebFrame.UserServices。

  在一般应用中,业务逻辑层类别库中只需要用CEntityDAO类别来操作数据库就够了:

  CEntityDAO dao=new CEntityDAO("my.xml",m_LanguageName);

  DataSet ds= dao.SearchDataset("SqlName");

  …………

  如果CEntityDAO类别不能满足要求,或对效能要求比较高,可直接使用CDBConn类别来操作数据库:

  CDBConn dbConn=CDBConn.Instance(m_ConnKey,m_LanguageName);

  dbConn.Open();

  dbConn.BeginTrans(); //开始事务

  dbConn. ExecuteNonQuery(strSql);

  …… //其它方法

  dbConn.CommitTrans();

  dbConn.Close();

  …………

  当使用CEntityDAO类别时,系统用到的所有SQL语句全部保存在XML格式的多个配置文件中(请用DBMap.exe来维护)。一个业务逻辑类用一个配置文件中(将该类用到的所有SQL全部放到一个文件中),这样有多少个业务类,就应该有多少个配置文件。SQL名称最好与类别中的方法名称相同,这样维护起来比较方便。

  类别说明及详细使用方法请参考<CDBConn.doc>、<CEntityDAO.doc>、<CBaseDAO.doc>。

  2.界面层:在前端接口项目/项目(WEB应用程序)中,至少包含WebFrame.Base、WebFrame.Config,其它可根据需要加入。

  在接口层的ASPX或HTM页面中,存取参数值(数据表字段值)的form元素的名称必须和参数名(数据表id)相同,这样就可以用如下方法取得参数值,然后传到业务逻辑类别中:

  (1) DataSet paramDataset=new DataSet;

  paramDataset.ReadXml(Request.InputStream);

  (2) NameValueCollection paramValues=newNameValueCollection();

  paramValues.Add(Request.Form);

  paramValues.Add(Request.QueryString)

  CSimpleUser myCls=new CSimpleUser(); //业务逻辑层类别

  myCls.SetLanguage(LanguageName); //设定使用的言语

  myCls.InsertRole(paramValues); //新增角色资料

  或

  myCls.InsertRole(paramDataset); //新增角色资料

  在WebFrame.UI中提供了一些前端接口用的公用类别,可根据情况使用或继承这些类别(也可不用),其中PageBaseDAO类别已经包含以上的paramDataset和paramValues参数,直接使用即可

  四: asp.net通用数据库访问层源码之权限

  权限

  WebFrame包含完整的用户数据维护和权限维护功能,包括用户、群组、角色、级别,从简单到复杂的系统都能满足。注意:TB_Function表中的SqlName字段,用于设定该功能使用的SqlName(在sql配置文件中),格式是: sql配置文件名/SqlName,多个用“,(逗号)”隔开(如:TB_User.xml/Insert,TB_Role.xml/Insert),如果该功能只用配置文件,则只输入配置文件名(如:TB_User.xml,TB_Role.xml)。如果该功能没有对应的Sql名或配置文件名,则可指定一个唯一的名称(如1001,Users),或功能编号(FuncNo),在程序中用myRight(SqlName)来判断是否有权限,其中的SqlName就是TB_Function表中的SqlName字段指定的名称或编号。

  根据需要,又分为简单和完全权限2种:

  1.

  简单权限:所有功能都放在WebFrame.UserSimple名字空间中,有3个类别(CUser,CRole,CFunction)(配置文件是TB_SimpleUser.xml,TB_SimpleUser.xml,TB_SimpleUser.xml)。没有群组和角色级别功能,一个用户只有一个角色(或当作群组),权限只有允许(查询、新增、修改、删除)/不允许。用于对权限要求比较简单的系统。

  用到的资料表有:TB_Function、TB_Role、TB_RoleRight、TB_Users等4个。

  用到的存储过程有:

  (1) UP_TB_RoleRight_GetRightById(共享)

  (2) UP_Simple_GetMenuByFuncNo(简单权限专用)

  (3) UP_Simple_GetUserRight(简单权限专用)

  (4) UP_Simple_GetRoleRight(简单权限专用)

  (5) UP_Simple_SetRoleRight(简单权限专用)

  (6) UP_Simple_Login(简单权限专用)

  (7) UP_TB_RoleRight_GetRoleRight(共享)(不用)

  (8) UP_TB_Function_DelAllFuncByNo(共享)(不用)

  用到的函数:UF_TB_Users_GetUserCountByGroup(公用)(可选,用于取得该群组的用户数)

  2.

  完全权限:具有完整的、复杂的权限控制功能,包括群组、角色级别。权限不仅有允许(1查询、2新增、3修改、4删除)/不允许,还有群组范围、角色(职务)级别控制。用于对权限要求高的系统,如OA系统、工作流等。包含在WebFrame.UserServices中的所有类别中。

  使用的配置文件有:TB_code.xml、TB_function.xml、TB_group.xml、TB_role.xml、TB_user.xml。

  用到的数据表(所有以TB_开头的数据表)。除包括简单权限用到的数据表外,还用到:TB_CdType、TB_Codes、TB_Group、TB_GroupInRole、TB_RoleLevel。

  用到的存储过程(所有以UP_TB_开头的存储过程,但不含“简单权限专用”,共26个)。

  用到的函数(所有以UF_TB_开头的函数:UF_TB_Role_GetGroupRole、UF_TB_Role_GetUserRole,UF_TB_Users_GetUserCountByGroup,共3个)。

  五: asp.net通用数据库访问层源码之多语言

  多语言版

  WebFrame 支持多国语言显示,但必须遵守以下原则:

  1.

  所有需要显示多国语言的信息,都保存在XML文件中(格式参考zh-CHT.xml,在程序中用CbaseConfig.GetMessage(MsgId)取得要显示的信息),一个语言版本保存一个XML文件,文件名用语言特性名(如繁体中文zh-CHT.xml,其它请参考CultureInfo类别说明),并统一放在一个目录下,在配置文件(WebFrame.config)中指定该目录。(参阅WebFrame.config)。

  2.

  如果一个语言用一个数据库(数据库结构必须完全一样),则数据库的ConnKey后必须加上“.言语名称”。

  如“DB.ConnString.zh-CHS”或“DB.ConnString_DbType.zh-CHS”,但在指定ConnKey时,不用“.言语名称”,如只用DB.ConnString。

  3.

  web.config中设定使用utf-8编码,如下:

  <globalization requestEncoding="utf-8"responseEncoding="utf-8" />

  所有文件最好都保存为“utf-8(有签章)”的格式。

  4.

  在用QueryString传送中文时,必须先进行编码:

  (1)

  在CS中用HttpUtility.UrlEncode(string),或用Server.UrlEncode(string)来编码,(不要用HttpUtility.HtmlEncode(string)或Server.HtmlEncode(string))。

  (2)

  在JS中用escape(string)来编码。

  (3)

  在JS中接收用(string)译码,在CS中接收不用译码,直接使用,如:

  string s=Request[“s”];

  或string s=Request.Params[“s”] ;

  5.

  采用下列2种方法来实现多言语版本:

  (1)

  每个言语有不同的界面程序(ASPX),并放到不同的目录中,如简体版放到 chs目录,繁体版放到cht目录,每个目录下都有一个web.config文件,用于设定该目录使用的言语(只有该行设定):

  <?xml version="1.0" encoding="utf-8"?>

  <configuration>

  <appSettings>

  <add key="Web.Language" value="zh-CHT"/>

  </appSettings>

  </configuration>

  在程序中用GetMessage(MsgId)取得系统显示讯息。

  此方法用于不同的言语,界面程序不一样的系统。

  (2)

  当不同言语使用同一界面程序(ASPX)时,界面程序类(ASPX.CS)继承MultiLangPage.cs类(在WebFrame.UI中),用LanguageName=’言语名称’来指定使用的言语(只需用一次),然后可用LanguageName取得该用户当前使用的言语,在程序中用MultiLangPage的GetMessage(MsgId)和CreateJSMsg(MsgIds)来取得系统显示讯息(页面中,需要多言语的文字都放在讯息文件中)。在使用业务逻辑类时,必须用SetLanguage(LanguageName)来指定使用的言语。在使用CDBConn、CEntityDAO及CBaseDAO时,也要显示指定言语名称LanguageName。

  6.

  WebFrame只解决程序中显示信息的多国语言的问题,而要完全解决多国语言的问题,必须在设计数据库时就要考虑(可采用一种言语用一个数据库来保存,数据库结构要一样)。

  global.asax.cs protected void Application_Start(Object sender,EventArgs e)

  ...{

  CBaseConfig.OnApplicationStart("project.dll");

  }

  protected void Application_Error(Object sender, EventArgse)

  ...{

  CBaseConfig.OnApplicationEnd();

  }

  protected void Application_End(Object sender, EventArgs e)

  ...{

  CBaseConfig.OnApplicationEnd();

  }

  protected void Session_Start(Object sender, EventArgs e)

  ...{

  CBaseConfig.AddViewCount("UserCount");//计数值

  …

  }

  web.config

  Web.config之appSettings配置说明

  <system.web>

  ……

  <!--设定上传档案最大K数(<20M)-->

  <httpRuntime maxRequestLength="20000"executionTimeout="180" />

  </system.web>

  <appSettings>

  <!—系统配置文件名(如果是物理路径,则必须有:\的符号(如c:aa.xml),否则以网站根目录为准,但不包含根路径(如myDir\aa.xml),预设是网站根目录下的AppConfig\WebFrame.config)-->

  <add key="WebFrame.Config" value=""/>

  <!--使用的言语特性(不设定或为空,则使用系统设定zh-CHT),zh-CHT 繁体版;zh-CHS 简体版 ;en 英文版 ja-JP 日文版-->

  <add key="Web.Language" value="zh-CHT"/>

  </appSettings>

  六: asp.net通用数据库访问层源码之CDBConn类

  数据库访问接口类,该类可访问不同数据库系统,使用时只调其Instance(ConnString)即可。该类在WebFrame.DB名字空间里

  使用方法

  属性说明

  1 Connection

  IdbConnection,数据库连接对象。

  函数说明

  1 Instance()

  根据WebFrame.config中设定的数据库连接字符串,生成CDBConn实例。返回CDBConn对象。

  (1) Instance()---用CBaseConfig.ConnString的数据库连接参数和预设语言名打开数据库

  (CBaseConfig.ConnString在配置文件(WebFrame.xml)中设置)

  (2) Instance(string ConnKey,stringLanguageName)---用ConnKey指定的数据库连接参数和LanguageName打开数据库

  ConnKey=数据库连接字符串的key(在WebFrameconfig中指定的),该key不包含语言名称。如:DB.ConnString.zh-CHS表示 ConnKey=DB.ConnString,LanguageName=zh-CHS

  如果WebFrameconfig中的key值不包含语言名称,则ConnKey=WebFrameconfig中的key值。

  LanguageName =使用的语言名称,主要用于多国语言(当一个语言用一个数据库时),语言名称用.net格式(如:zh-CHT繁体版 ;zh-CHS 简体版 ;en英文版)。WebFrame.config中数据库连接字符串的key值包含该语言名称,如DB.ConnString.zh-CHS的语言名称是zh-CHS。

  2 Open()

  Open()---打开数据库,没有返回值。

  3 Close()

  Close()---关闭数据库,没有返回值。

  4 IsOpen()

  IsOpen()—判断数据库是否已经打开,返回值:true=是

  5 BeginTrans()

  BeginTrans()---开始事务处理,没有返回值。

  6 CommitTrans()

  CommitTrans()---提交事务处理,没有返回值。

  7 RollbackTrans()

  RollbackTrans()---撒消事务处理,没有返回值。

  8 ExecuteNonQuery()

  执行SQL语句,对于Insert,Update,Delete返回影响的数据笔数,对于其它SQL,返回-1或0,错误返回-2

  ? cmd=要执行的IdbCommand变量,包含参数值(请用CDbCmd类的DbCmd取得)

  ? strSql=要执行的完整SQL语句(如:select * from tab where id=1)。

  ? sql=要执行的CSqlStruct对象 (请用CEntityBuilder类的GetSqlStruct取得)

  ?dtVal=DataTable类型,保存cmd的参数值(一笔数据对应一个参数值,可执行多个参数值,DataTable列名与参数名相同)。

  ?paramValue=NameValueCollection类型,保存cmd的参数值。name=参数名(与cmd中的参数名相同),value=参数值

  ?xmlVal=参数保存在XML格式的字符中,格式:<r><paramNamevalue='11'/>...</r>。当只有一个参数时,xmlVal=参数值

  ? paramVal=object数组,保存参数值,与参数名的个数和顺序相同(cmd中的参数个数和顺序相同)。

  9 ExecuteScalar()

  执行SQL语句,返回第一行第一列的值。

  ? 参数说明请参考ExecuteNonQuery()。

  10 ExecuteProcedure()

  执行存储过程,结果保存在NameValueCollection类型中,name=返回参数名,value=返回参数值,失败返回null。

  ? procName=要执行的存储过程名,该存储过程没有参数,如果成功则返回true。

  ? 其它参数说明请参考ExecuteNonQuery()。

  11 ExecuteProcScalar()

  执行存储过程,返回第一个返回值或返回参数的值,失败返回null。

  ? procName=要执行的存储过程名,该存储过程没有参数,返回存储过程返回值。

  ? 其它参数说明请参考ExecuteNonQuery()。

  12 ExecuteDataset ()

  执行语句,成功返回DataSet,失败返回null。

  ? TableName=DataSet中的资料表名,预设是Table1。

  ? 其它参数说明请参考ExecuteNonQuery().

  13 ExecuteReader ()

  执行语句,成功返回IdataReader,失败返回null。

  ? 参数说明请参考ExecuteNonQuery()。

  14 GetMaxValue()

  取数据表指定字段的最大值,一般是取主键的最大值,成功返回取到的最大值,失败返回0

  TableName=数据表名,取哪个数据表的字段。

  ColName=字段名,取哪个字段的最大值,该字段必须是数字型.

  CSqlDBCon类

  访问 Sql server数据库类,继承CDBConn,并实现CDBConn中的方法。Client不直接使用该类。

  COleDBConn类

  访问 Sql server以外的其它数据库系统(同CSqlDBConn)

  CEntityBuilder类

  用于由SQL配置文件中产生SQL语句。该类在WebFrame.DB名字空间里

  使用方法

  CEntityBuilder builder=newCEntityBuilder(m_EntityFileName);

  CSqlStruct sql=builder.GetSqlStruct(SqlName);

  CDBConn conn=CDBConn.Instance(ConnKey,LanguageName);

  conn.Open();

  conn.ExecuteNonQuery(sql);

  conn.Close();

  函数说明

  1 CEntityBuilder()

  CEntityBuilder(string EntityFileName)-- 构造函数。

  ? EntityFileName=配置文件名,XML格式(不含路径)

  2 SetEntityFile()

  SetEntityFile(string EntityFileName)—设定配置文件名

  ? EntityFileName=配置文件名,XML格式(不含路径)

  3 GetSqlStruct()

  GetSqlStruct(stringSqlName)--取CSqlStruct对象,该对象的各属性的值由配置文件EntityFileName中的<sqlname=”SqlName”>决定,即用配置文件EntityFileName中的SQL名称指定的值来生成SQL语句及参数。成功返回生成的CSqlStruct对象,失败返回null.

  ? SqlName=要生成的SQL配置文件EntityFileName(XML格式)中的sql名称(<sql name=”SqlName”)。

  七 :asp.net通用数据库访问层源码之CEntityDAO类

  CEntityDAO类

  用于对数据库操作。对于单表的新增、修改、删除、查询等操作,可以直接使用该类别。该类在WebFrame.DB名字空间里

  使用方法

  CEntityDAO dao=newCEntityDAO(m_EntityFile,m_ConnKey,m_LanguageName,m_UseClass);

  DataSet ds=dao.ExecuteDataset(sqlName);

  在ASPX页面中,如果要用form的组件值作为参数值(如<input type=”text”name=”UserName”>),该组件名(UserName)必须与参数名(即sal配置文件中的参数名,或id名,这里是UserName)相同,这时,可用以下方法取得参数值:

  (1) DataSet paramDataset=new DataSet;

  paramDataset.ReadXml(Request.InputStream);

  (2) NameValueCollection paramValues=newNameValueCollection();

  paramValues.Add(Request.Form);

  paramValues.Add(Request.QueryString)

  属性说明

  1. LastMsg

  string, 最后的错误信息。当操作发生错误时,该值包含错误原因,请将其显示出来。

  2. ConnKey

  string, 指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS)。

  3. LanguageName

  string, 指定使用的语言名称。

  4. UseClass

  string, 指定调用该类别的类名或页面名,一般在使用该类别的函数用GetType().ToString()。

  5. EntityFileName

  string, 指定Sql配置文件名,不含路径。

  函数说明

  参数说明

  以下函数的参数都是相同,其说明如下:

  ? SqlName=要执行的SQL名称。配置文件(在Data目录下的*.xml)中的<sqlnqme=”SqlName”>

  ?xmlVal=参数保存在XML格式的字符中,格式:<r><paramNamevalue='11'/>...</r>。当只有一个参数时,xmlVal=参数值

  ?paramValue=NameValueCollection类型,保存cmd的参数值。name=参数名(与cmd中的参数名相同),value=参数值。(对于SqlType=”Insert,Update”且replace=”1”时,可用多个值来执行多个SQL,如果某个参数的值小于最大个数,就用最后一个值,其它情况只用第一个值执行一个SQL)

  ? oParamVal =object数组,保存参数值,与参数名的个数和顺序相同(与cmd中的参数个数和顺序相同)。

  ?dtVal=DataTable类型,保存sql的参数值(一笔资料对应一个参数值)。DataTable列名必须与参数名(字段ID)相同。(对于SqlType=”Insert,Update”且replace=”1”时,可用多个值来执行多个SQL,其它情况只用第一个值执行一个SQL)

  1. CEntityDAO()

  CEntityDAO的构造函数。

  (1)CEntityDAO()—必须用属性来指定EntityFileName,如果不指定ConnKey、LanguageName、UseClass,则使用默认值。

  (2) CEntityDAO(stringentityFileName)—-指定sql配置文件名。可用属性指定ConnKey、LanguageName、UseClass,如不指定则使用默认值。

  (3) CEntityDAO(string entityFileName,stringconnKey)—-指定sql配置文件及连接字符串的key,可用属性指定LanguageName、UseClass,如不指定则使用默认值。

  (4) CEntityDAO(string entityFileName,string connKey,stringlanguageName)--指定sql配置文件、连接字符串的key、语言名称,可用属性指定UseClass,如不指定则使用默认值。

  (5) CEntityDAO(string entityFileName,string connKey,stringlanguageName,string useClass)--指定sql配置文件、连接字符串的key、语言名称、使用的类别名。

  ? entityFileName=sql配置文件名,不含路径,必须要指定。

  ?connKey=数据库连接字符串的key值,预设使用DB.ConnString。在WebFrame.config中指定,不包含语言名称,如:<addkey="DB.ConnString.zh-CHS" value="…">中的DB.ConnString

  ? languageName=使用的语言名称,预设是zh-CHT。用.net格式,如zh-CHT 繁体版 ;zh-CHS 简体版;en 英文版

  ? useClass=使用访类别的类名。在调用该类的函数中用GetType().ToString().

  2. Insert()

  用SQL语句新增数据,成功返回最后新增的数据ID值,没有新增返回0,错误返回-1。

  如果<sql name=’…’replace=’1’…>中的replace=”1”或”true”,则多个值来执行(拼成多个insert语句,用于同时新增字段少且数据少的数据)(如果某个值的个数小于最大个数,则用最后一个值),否则只用第一个值(用Command执行,用于新增字段多且数据多的数据)。成功返回第一个ID值(其它ID值可按第一个ID+1计算)。

  ?bAuto=指定是否要函数来计算主键的最大值。对于主键字段是数字(int),且不是自动+1,该值应该为true。预设=true。

  ? bTrans=指定是否需要事务,true:要事务。预设=false。

  3. Update()

  用SQL语句修改数据,成功返回修改的数据笔数,没有修改返回0,错误返回-1

  (参数与Insert()类似,请参考Insert()说明)(预设SqlName=Update)。

  如果<sql name=’…’replace=’1’…>中的replace=”1”或”true”,则多个值来执行(拼成多个update语句,用于同时修改字段少且数据少的数据)(如果某个值的个数小于最大个数,则用最后一个值),否则只用第一个值(用Command执行,用于修改字段多且数据多的数据)。成功返回第一个ID值。

  ? bTrans=指定是否需要事务,true:要事务。预设=false。

  4. ExecuteNonQuery()

  执行SQL语句,成功返回执行的数据笔(int),没有结果返回0,错误返回-1。

  5. ExecuteScalar()

  执行SQL语句,成功第一行第一列的值(object),失败返回null。

  6. ExecuteProcedure()

  执行存储过程,返回存储过程的返回值或输出参数(NameValueCollection类型,name=参数名,value=结果值),失败返回null。

  7. ExecuteProcScalar()

  执行存储过程,返回存储过程的第一个返回值或输出参数(object),失败返回null。

  8. ExecuteDataset()

  查找指定条件的数据(SqlType='Text'),成功返回取得的资料(DataSet),失败返回null

  9. ExecuteReader()

  查找指定条件的数据(SqlType='Text'),成功返回取得的资料(IDataReader),失败返回null

  ? conn=CDBConn类型,数据库连接对象。先用CDBConn dbConn=CDBConn.Instance();dbConn.Open();打开数据库。

  10. SearchDataset()

  取指定条件的数据(SqlType=”Search”),可以只取指定页的资料(配合存储过程UPP_ExecuteForPage使用),成功返回取得的数据(DataSet),失败返回null

  (1)CurrPage=int类型,指定当前页号,即取该页的数据。当用UPP_ExecuteForPage来取数据时,用CurrPage来指定取哪页的数据,当CurrPage=0时,取总资料笔数。当不使用UPP_ExecuteForPage时,CurrPage的值无效(不用该参数)

  (2)PageSize=int类型,指定每页多少笔数据。当用UPP_ExecuteForPage来取数据时,用PageSize来指定取每页多少笔数据,当PageSize=0时,取全部(不分页)。当不使用UPP_ExecuteForPage时,PageSize的值无效(不用该参数)

  (3)RowCount=int类型,本次查询的总记录数(先用ExecuteProcScalar()取总记录数(CurrPage=0),然后传给该参数),如果RowCount=-1则返回2个Tables(0:取得的资料集,1:资料总数(只有一个值))。当不使用UPP_ExecuteForPage时,RowCount的值无效(不用该参数)。

  11. SearchReader()

  取指定条件的数据(SqlType=”Search”),可以只取指定页的资料(配合存储过程UPP_ExecuteForPage使用),成功返回取得的数据(IDataReader),失败返回null

  (参数与ExecuteProcedure()类似,请参考ExecuteProcedure()说明。)

  (1) conn=CDBConn类型,数据库连接对象。先用CDBConn dbConn=CDBConn.Instance();dbConn.Open();打开数据库。

  九十: asp.net通用数据库访问层源码之CRightDAO类

  CRightDAO类

  数据库操作基本类,在WebFrame.Base名字空间里,共有三个:CBaseDAO、CSimpleDAO、CRightDAO。所有对数据库的操作的业务逻辑层类别都继承该类。CSimpleDAO包含由ASPX页面传来的context对象,用于判断当前用户的权限,而CBaseDAO则不包括context对象,要判断权限,必须传入用户数据。一般情况下:

  ? 不需判断权限时,继承CBaseDAO

  ? 只需简单权限时,继承CSimpleDAO,该类继承CBaseDAO。

  ? 需要完全权限时,继承CRightDAO,该类继承CSimpleDAO。

  使用方法

  1.该类在WebFrame.Base名字空间里,所以必须引入WebFrame.Base才能使用。在需要对数据库操作的业务逻辑类别中继承。

  2.该类预设用系统内定的数据库(由配置文件(WebFrame.config)的key=”DB.ConnString”指定),如果要使用其它数据库,则必须指定m_ConnKey的值(配置文件(WebFrame.config)的key=”DB.ConnString”等)。建议生成一个继承该类的新类别,在构造函数中指定m_ConnKey值,在使用相同该数据库时,再继承这个新类别。

  3. 如果要判断权限,则用myRight()取得权限值,然后进行判断,再执行存取数据函数。

  在ASPX页面中,如果要用form的组件的值作为参数值(如<input type=”text”name=”UserName”>),该组件名(UserName)必须与参数名(即sql配置文件中的参数名,或id名,这里是UserName)相同,这时,可用以下方法取得参数值:

  (1) DataSet paramDataset=new DataSet;

  paramDataset.ReadXml(Request.InputStream);

  (2) NameValueCollection paramValues=newNameValueCollection();

  paramValues.Add(Request.Form);

  paramValues.Add(Request.QueryString)

  属性说明

  1. myUserId

  string, myUserId=m_UserId,使用者ID。

  2. myUserLevel

  string, myUserLevel=m_UserLevel, 使用者(登录者)的用户(职务)级别。

  3. myParentId

  string, myParentId=m_ParentId,使用者所在群组的上级群组ID

  4. myGroupId

  string, myGroupId=m_GroupId,使用者据群组ID

  5. myRoleId

  string, myRoleId=m_RoleId使用者所拥有的角色ID,可有多个(用,分开)

  6. myRoleLevel

  string, myRoleLevel=m_RoleLevel,使用者最大角色级别。

  7. LastMsg

  string, LastMsg=最后信息。

  8. ConnKey

  string, 指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS)。

  9. UseClass

  string, 指定调用该类别的类名或页面名,一般在使用该类别的函数用GetType().ToString()。

  函数说明

  1. CRightDAO ()

  构造函数,一般使用CRightDAO ()。

  ? UserId=string, 使用者ID,必须已经解密(将Session(“UserId”)解密)。

  ? UserLevel= string,使用者(职务)级别。

  ? GroupId= string, 群组ID,必须已经解密(将Session(“GroupId”)解密)。

  ? ParentId= string,上级群组ID,必须已经解密(将Session(“parentId”)解密)。

  2. SetEntityFile()

  SetEntityFile(string fileName,stringconnKey)--设置sql配置文件,该文件是XML格式,保存SQL语句。

  ? fileName= string,sql配置文件名(在Data目录下的*.xml),不包括任何路径,如my.xml

  ? connKey=string,指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS).

  3. SetLanguage()

  SetLanguage(string languageName ,stringuseClass)--设定使用的语言名称。

  ? languageName=使用的语言名称。

  ? useClass=调用该类别的类名或页面名,一般在使用该类别的函数用GetType().ToString()

  4. SetContext()

  SetContext()—设定页面的Context值。

  5. SetUser()

  SetUser(string UserId,string UserLevel)--设置使用者ID,即将使用者ID解密。

  ?UserId=加密的使用者ID。预设=null,表示使用Session["UserId"],解密后保存在m_UserId中,当没有UserId(UserId=null,0)时,m_UserId=”-9”(可由属性UserId取得m_UserId的值)

  ?UserLevel=解密后的用户级别,如果是空,则解密登录()的用户级别(Session["UserLevel"])

  6. SetGroup()

  SetGroup(string GroupId,stringParentId)--设置使用者所在群组ID及上级群组ID,即将群组ID及上级群组ID解密。

  ?GroupId=加密的群组ID,预设=null,即使用Session["GroupId"],解密后保存在m_GroupId中,当没有GroupId(GroupId=null,0)时,m_GroupId=”-8”(可由属性GroupId取得m_GroupId的值)

  ?ParentId=加密的上级群组Id,预设=null,即使用Session["ParentId"],解密后保存在m_ParentId中,当没有ParentId(ParentId=null,0)时,m_ParentId=”-7”(可由属性ParentId取得m_ParentId的值)

  7. SetRole()

  SetRole(string RoleId,stringRoleLevel)--设置使用者所拥有的角色ID及角色级别,即将角色ID及角色级别解密。

  ?RoleId=加密的角色ID,预设=null,即使用Session[RoleId"],解密后保存在m_RoleId中,当没有RoleId(RoleId=null,0)时,m_RoleId=”-6”(可由属性RoleId取得m_RoleId的值)

  ?RoleLevel=角色级别,预设=null,即使用Session["RoleLevel"],解密后保存在m_RoleLevel中,当没有RoleLevel(RoleLevel=null,0)时,m_RoleLevel=”-5”(可由属性RoleLevel取得m_RoleLevel的值)。

  8. myRight()

  myRight(string UserId,stringSqlName)--取得使用者的操作权限。即判断该用户对该SqlName的操作权限,返回值:小于0:无权限,1-查找,2-新增,3-修改,4-删除,9-全部。

  m_FullRight保存全部权限,格式:199111(6位),每个权限一位(0无,1有),顺序是(从左到右)1-允许,2-群组,3-角色级别,4-汇出,5-打印,6-远程。(其中,2-群组的值又有1-仅自己,2-仅群组内,3-组内及下层组,4-同级组及其下层,5-指定组,9-全部,3-角色级别的值又有1-低级别,2-同级别,9-全部)

  m_right=m_FullRight中的一位,即保存m_FullRight中的一个权限。

  ? SqlName=SQ名称,即配置文件中的 <sqlname=”SqlName”>,系统是用SQL名来判断是否有执行该SQL的权限

  ? UserId=使用者ID,必须是已解密。即判断该使用者是否有执行该SQL名的权限。

  ? type=取权限的类别(完全权限用),0-全部,1-允许(1-查找,2-新增,3-修改,4-删除,9-全部),2-群组(1-仅自己,2-仅群组内,3-组内及下层组,4-全部),3-级别(1-低级别,2-同级别,9-全部),4-汇出,5-打印,6-远程。预设是0,即当用myRight()时则取全部权限。

  9. IsGroupRight()

  IsGroupRight(string SqlName,string GroupId_UserId,bool isUser)--判断登录用户对SqlName操作的群组权限(登录用户群组与给定的群组的关系(同组、下层组,同组组)。有权限,返回>0:(1:仅自己,2:组内,3:组内及下层组,4:同级组及其下层组,9:全部),-10:未登录,-9:无权限,0:有权限但不在组内

  ? SqlName=SQL名称,即配置文件中的 <sqlname=”SqlName”>,系统是用SQL名来判断是否有执行该SQL的权限。

  ? GroupId_UserId=要判断的群组ID,或使用者ID(判断该使用者所在的群组ID)。

  ? GroupId=要判断的群组ID,使用者群组与该群组的关系(同组、下层组,同组组)

  ?isUser=指定GroupId_UserId的值,当isUser=true时,GroupId_UserId=UserId(用该使用者ID来取得其群组ID),否则GroupId_UserId=GroupId。

  10. Insert()

  新增数据,成功返回新增的数据ID,没有新增返回0,错误返回-1。

  ? SqlName=执行新增的SQL名称,即配置文件中的 <sqlname=”SqlName”>,预设=Insert。

  ?paramValues=NameValueCollection类型,保存新增的参数值,name=参数名(必须与SQL的参数名相同),value=参数值(可多个值,即允许新增多笔数据)

  ?dtVal=DataTable类型,保存SQL的参数值(可多个值,一笔数据一个值,即允许新增多笔数据)。当没有colHash时,DataRow列名必须与参数名相同。

  ?bAuto=指定是否要函数来计算主键的最大值。对于主键字段是数字(int),且不是自动+1,该值应该为true,否则为false。预设=true。

  ? bTrans=指定是否需要事务,true:要事务。预设=false。

  ? right=指定是否要判断权限,right=true是(预设),right=false不用判断权限。

  11. Update()

  修改数据,成功返回修改数据笔数,没有修改返回0,错误返回-1。

  (参数与Insert()类似,请参考Insert()说明)(SqlName预设=Update)

  12. Delete()

  删除数据,成功返回删除的数据笔数,没有删除返回0,错误返回-1。

  ? SqlName=执行删除的SQL名称,即配置文件中的 <sqlname=”SqlName”>,预设=Delete。

  ? Ids=要删除的数据ID,多个用,分开。

  ? bTrans=指定是否需要事务,true:要事务。预设=false。

  ? right=指定是否要判断权限,right=true是(预设),right=false不用判断权限。

  13. IsExists()

  IsExists(string SqlName,string colValue,string msgID)--判断数据是否存在(如账号、Email等不能重复的字段),讯息在LastMsg中

  ? SqlName=要判断的SQL名称,即配置文件中的 <sqlname=”SqlName”>,该sql格式必须是:select id from tab wherecolName=colValue。

  ? colValue=要判断的字段值。

  ? msgID=显示讯的ID(空:不显示讯息)

  14. GetJSValues()

  GetJSValues(string jsParamName,string SqlName,object[]paramVal)--取得指定sqlname的JS变量值,用于联动select。执行SqlName的返回字段是:上级ID,本级ID,名称

  返回JS字符串,格式:

  var jsParamName=new Array();jsParamName[0]=newArray("0","1","名称1");.....

  ? jsParamName= JS变量名,该变量在JS函数中调用。

  ? SqlName=要判断的SQL名称,即配置文件中的 <sqlname=”SqlName”>,该sql格式必须是:select id from tab wherecolName=colValue。

  ? paramVal= sql的参数值,个数和顺序必须与参数名相同。

  15. isLogin()

  判断是否已经登录系统,是返回true,否返回false

  16. IsEdit()

  IsEdit(string SqlName,SByte type)—判断是否有编辑权限,是返回true。

  ? SqlName=SQL名称,即配置文件中的 <sqlname=”SqlName”>,系统是用SQL名来判断是否有执行该SQL的权限。

  ? Type=要判断哪个权限:1-查找,2-新增,3-修改,4-删除,9-全部

  17. AddMsg()

  AddMsg(string msgID,bool isClear)-- 将指定讯息ID的内容加入到LastMsg中

  ? msgID =要加入的讯息ID,在讯息文件中

  ? isClear= true(预设):清除LastMsg的所有讯息

  18. DispMsg()

  DispMsg(string msg,string url,bool IsBack)—用JS显示讯息,并返回指定页面。

  ? msg =要显示的信息,如果是null或空,则显示LastMsg

  ? url= IsBack=false时不用。IsBack=true时,返回的页面地址,,或要执行的JS函数(以")"结束)。url=null或'':返回上一页面history.go(-1),_只有2个数字以内:返回history.go(-url),以');'或')'结束则url=JS函数。

  ? IsBack=true:返回,false:不返回(留在当前页)

  CSecurity类

  判断使用者的操作权限类别,在WebFrame.Base名字空间里。是静态类,可以直接使用。

  使用方法

  该类在WebFrame.Base名字空间里,所以必须引入WebFrame.Base才能使用。可以直接使用,如CSecurity.GetRight();

  属性说明

  无

  函数说明

  1. GetSimpleRight()

  GetSimpleRight(string UserId,string EntityFile,stringSqlName,string ConnKey,stringLanguageName)--取简单操作权限,即只取是否允许的权限,返回取得的权限(1有,0无)。该函数执行UP_TB_RoleRight_GetUserRight存储过程。返回:0-无权限,1-查找,2-新增,3-修改,4-删除,9-全部

  ? UserId=使用者ID(必须已解密),取该使用者ID的权限。

  ? EntityFile=sql配置文件名,不含路径

  ? SqlName=配置文件中的SQL名称(<sqlname=”SqlName”>),即取UserId是否有对SqlName操作的权限。

  ? ConnKey=指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS)。

  ? LanguageName=指定使用的语言名称。

  2. GetRight()

  取全部权限,返回取到的权限(无权限返回0),格式:199111(6位),每个权限一位(0无,1有),顺序是(从左到右)1-允许,2-群组,3-角色级别,4-汇出,5-打印,6-远程。(其中,2-群组的值又有1-仅自己,2-仅群组内,3-组内及下层组,4-同级组及其下层,5-指定组,9-全部,3-角色级别的值又有1-低级别,2-同级别,9-全部)。该函数执行UP_TB_RoleRight_GetUserRight存储过程。

  GetRight(string RoleIds,string EntityFile,string SqlName,stringConnKey,string LanguageName)=取指定RoleIds的SqlName的全部权限

  GetRight(int right,int type) =由全部权限值取中期一个权限的值,即分解全部权限的值。

  (参数与GetSimpleRight()类似,请参考GetSimpleRight()说明)

  ? RoleIds=角色ID,多个用,分开

  ? right=权限值,由GetRight(UserId,SqlName)取得的权限值。

  ? type=要取的权限类别,1-允许,2-群组,3-角色级别,4-汇出,5-打印,6-远程。

  3. IsInGroup()

  IsInGroup(string ParentId,string User_GroupId,bool bUserId,stringConnKey,stringLanguageName)--判断用户ID或群组ID是否是另一个群组内及下层组,返回值:1=User_GroupId与ParentId同组,2=User_GroupId是ParentId的直接下层,3=User_GroupId是ParentId的下层之下层,0-User_GroupId与ParentId无关系。该函数使用UP_TB_Users_IsInGroup存储过程。

  ? ParentId=上级群组ID,或群组ID。判断使用者的群组与ParentId的关系。

  ? User_GroupId=要判断的用户ID或群组ID,与ParentId中的关系。

  ?bUserId=指定User_GroupId的值,当bUserId=true时,User_GroupId=UserId(用该使用者ID来取得其群组ID),否则User_GroupId=GroupId

  ? ConnKey=指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS)

  ? LanguageName=指定使用的语言名称

  4. IsRoleLevel()

  IsUserLevel(string UserId1,string UserId2,string ConnKey,stringLanguageName)--比较操作者的级别与指定用户角色级别,返回值:-1:RoleLevel低于指定用户级别,0:相同,1:RoleLevel高于指定用户级别。该函数使用UP_TB_Role_IsRoleLevel存储过程。

  ? RoleLevel=角色级别,判断用户的角色级别与RoleLevel的比较。

  ?Role_User_GroupId=使用者的角色ID、或用户ID、或群组ID,用这些ID来取角色级别,然后与RoleLevel比较。

  ?nRoleId=指定Role_User_GroupId的类别,nRoleId=0时:Role_User_GroupId=RoleLevel角色级别,nRoleId=1时:Role_User_GroupId=RoleId角色ID,nRoleId=2时:Role_User_GroupId=UserId用户ID,nRoleId=3时:Role_User_GroupId=GroupId群组ID

  ? ConnKey=指定数据库连接字符串的key,该值在系统配置文件(WebFrame.config)中的

  <addkey=”DB.ConnString.zh-CHS”…/>中指定(不包含语言名称.zh-CHS)

  ? LanguageName=指定使用的语言名称
posted @ 2011-01-21 18:01  web程序人生  阅读(392)  评论(0编辑  收藏  举报