一: 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. PageCacheExpiresInSecond 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=指定使用的语言名称 |
|