常用的数据库统计SQL语句(2)
作者:admin 日期:2009-04-01
Oracle学习:Oracle常用函数集
作者:admin 日期:2009-03-31
虽然网上多得是,但是还是自己整理一下,加深印象。
提供给大家 Excel版,方便打印.
数值函数 | ||
函数 | 说明 | 备注 |
ABS(n) | 返回n的绝对值 | |
ACOS(n) ASIN(A) ATAN(n) | 返回n的反余弦 反正弦值 反正切值 | |
COS(n) SIN(n) TAN(n) | 返回n的余弦值 正弦值 正切值 | |
FLOOR(n) | 返回小于或等于n的最大整数 | |
MOD(m,n) | 返回m除以n之后的余数,若n为0,则返回m | |
CEIL(n) | 返回大于等于n的最小整数 | |
ROUND(n,m) | 执行四舍五入运算 | 若省略m,则四舍五入到整数位;若m是负数,则到小数点前m位;若m为正数,则到小数点后m位 |
EXP(n) LN(n) LOG(n) | 返回e的n次幂 以E为底的对数 对数 | |
SQRT(n) | 返回n的平方根,n必须大于0 | |
SIGN(n) | 检测n的正负. | 若n小于0,则返回-1;若n等于0, 则返回0.若n大于0,则返回1 |
聚集函数 | ||
COUNT(n) | 返回某字段的记录总数 | |
AVG(col_name) | 返回某一列的平均值 | |
MAX(exp) MIN(exp) | 返回exp参数的最大值 最小值 | |
MEDIAN(exp) | 返回exp参数的中间数 | |
SUM(exp) | 返回exp参数的总和 | |
Group-ID | 判别由Group By说明产生的重复组 | |
Rank(value) | 计算在一组值中某值的排列 | |
Greatest(c1,c2) | 返回参数列表中的最大值 | |
Least(c1,c2) | 返回参数列表中的最小值 | |
COALESCE(c1,c2) | 返回该表达式列表中的第一个非空值 | |
VAR-POP(value) | 总体方差 | |
字符函数 | ||
ASCII(n) | 返回n的首字符在ASCII码中对应的十进制数 | |
CHR(n) | 返回十进制ASCII码n对应的字符 | |
CONCAT(C1,C2) | 将C1连接在C2的后面 | |
LENGTH(C1) | 返回字符串C1的长度 | |
LOWER(C1) UPPER(C1) | 返回C1的小写 大写 | |
LTRIM(C1) RTRIM(C1) | 去掉C1左边的空格 去掉C1右边的空格 | |
INITCAP(c1) | 将C1的首字符大写,其它小写 | |
REPLACE(C1,C2,C3) | 将C1中出现的C2替换成C3 若C3为空,则将C2删除 | |
SUBSTR(c,m,n) | 返回c中以第m位开始算起长度为n的字符串.若m为负数,则从尾数开数 | |
TRANSLATE(C1,C2,C3) | 将C1中出现的C2替换成C3 然后返回修改后的C1 | |
RPAD(C1,LENGTH,C2) LPAD(C1,LENGTH,C2) |
RPAD 允许在列的右边填充一组字符 LPAD 允许在 列的左边填充一组字符 |
添加的字符可以为句号,逗号,感叹号, 字母,数之际 |
|| | 连接符 用于将两个字符串结合在一起 | |
日期及时间函数 | ||
sysdate | 返回当前数据库的日期时间 | |
current_date | 返回现在的最新日期 | |
DBtimezone | 返回数据库所在的时区 | |
Add_months(d,n) | 返回时间d加了n月后的新时间 | |
Next_day(d,c) | 返回日期d后的下一个c | |
Last_day(d) | 返回该日期d所在月份的最后一天 | |
MONTHS_Between(d1,d2) | 返回日期d1与d2的相差月数 | |
Extract(c,from d) | 返回日期时间d中指定的C部分 | C的取值为year,month,day,min, second,timezone等 |
localtimestamp(d) | 返回一个时间戳 | |
Round(d,format) | 将d转换成以format字符串格式指定的格式 | format是指oracle的日期格式 |
转换函数 | ||
ASCIISTR(string) | 接受一个字符串参数,返回ASCII码 | |
BIN_TO_NUM(n1,n2,n3) | 将每位由n1,n2,n3等组成的二进制转变成十进制 | |
Cast(c as t) | 将表大字式以转换成数据类型t t为数据类型 | t可以为自定义的数据类型 |
CHARTOROWID(string) | 将某个rowID的字符串转换为rowID值 | |
TO_CHAR(X,format) | 返回x按format格式转换后的字符串 | |
TO_DATE(X,format) | 返回x按format格式转换后的时间类型的数据 | |
TO_Number(X,format) | 返回x按format格式转换后的数字类型的数据 | |
TO_Nchar(string,format,params) | ||
Translate(strng,if,then) | 在字符串中进行逐字符的替换 | |
DeCODE(value,if,then) | 在字符串中进行逐值的替换 | |
CARDINALITY(table_name) | 返回嵌套表中的记录数,返回整型 | |
COLLECT(column_name) | 用于与cast函数共同创建拥有特定列表的嵌套表, 并将该列强制转换成cast函数中所指定的类型 |
|
HEXTORAW | 十六进制转换为二进制 | |
RAWTOHEX | 二进制转十六进制 | |
其它函数 | ||
NVL(exp1,exp2) | 如果exp1的值为null,返回exp2;否则返回exp1 | |
NVL2(exp1,exp2,exp3) | 同NVL一样运用 | |
UID | 返回登录当前会话的用户UID | |
USER | 返回当前登录会话的用户名 |
EMS企业网站管理系统 Beta2009.0.02 版
作者:admin 日期:2009-03-17
常用的一些数据统计SQL语句
作者:admin 日期:2009-03-17
只有在作统计分析的时候,你才能感觉到数据库的强大,才能感觉到数字游戏的趣味性所在。当然,对于企业而言,则是用于进行决策分析的最好支持之一. 最近刚完工的一个项目中对SQL的运用,让我又对SQL的理解与使用加深了一层。很高兴与大家分享其中的乐趣.
废话少说,我们先建一个原始表吧。
新建表:
Create TABLE [dbo].[DezaiCn_Sale] (
[ID] int IDENTITY(1, 1) NOT NULL,
[日期] datetime NOT NULL,
[销售量] int NOT NULL,
[店铺名] char(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_Test_Sale] PRIMARY KEY CLUSTERED ([ID])
废话少说,我们先建一个原始表吧。
新建表:
复制内容到剪贴板 程序代码
Create TABLE [dbo].[DezaiCn_Sale] (
[ID] int IDENTITY(1, 1) NOT NULL,
[日期] datetime NOT NULL,
[销售量] int NOT NULL,
[店铺名] char(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_Test_Sale] PRIMARY KEY CLUSTERED ([ID])
Web开发电子期刊2009年第3期(总第31期)
作者:admin 日期:2009-03-08
利用zedGraph实现不定曲线数曲线的生成
作者:admin 日期:2009-02-28
Web开发电子期刊2009年第2期(总第30期)
作者:admin 日期:2009-02-04
这期的教程量比以前多了一倍多,希望能给大家带来帮助。请多多支持我们的期刊,谢谢。同时感谢所有教程的原著作者及出处。
期刊目录:
Net |
ASP.NET 中缓存应用 |
ASP.NET中验证页开发技巧 |
ASP.NET 2.0个性化配置 |
GRIDVIEW中实现上移下移 |
ASP.NET缓存策略经验谈 |
System.Data.DataTable计算功能详解 |
NET序列化与反序列化操作 |
遍历指定文件夹下所有的xml文件并动态生成HTML页面 |
结构体构造函数的应用 |
NHibernate入门级示例(增 删 改) |
提高C#编程水平的50个要点 |
C# 编程中的内存管理 |
Java |
Java远程通讯可选技术及原理 |
按指定的编码读取文本文件内容 |
Java开发中如何应用线程 |
2009年10个Java技术解决方案 |
提高WebSphere Portal性能的捷径 |
J2EE乱码问题解决方案汇总 |
J2EE项目代码编写规范 |
Java编程基础中模式和框架的区别 |
JAVA实现屏幕抓图和远程桌面控制的方法 |
Java应用过程中获取系统属性 |
Java应用从集中式步入分布式 |
Hibernate 参数设置一览表 |
MS SQL |
SQL Server Analysis Service中Cube的结构 |
SQL Server 2005 BI数据挖掘案例(库存预测) |
精妙SQL速查手册 |
SQL日期格式化应用大全 |
数据挖掘的理论基础 |
SQL语句对表中父子节点正向和反向取所有节点 |
SQL统计语句收集 |
sql中分隔字串-->查询-->组合字串 |
SQL 計算一個字符串在另一個字符串中出現的次數 |
SQL 中的统计应用 |
调试SQL Server的存储过程及用户定义函数 |
可按任意字段排序的分页存储过程 |
Oracle |
Oracle新手最常碰到的6个错误及解决方案 |
PL/SQL初学者必读:几十个实用的PL/SQL |
用SQL语句实现进制间互相转换 |
Oracle客户端如何连接到数据库 |
Oracle数据库后台进程的具体功能 |
Oracle面试过程中常见的二十个问题 |
Oracle中SQLPLUS的常用指令收集与技巧 |
轻松解决Oracle数据库的服务启动问题 |
如何收集Oracle进程中SQL跟踪信息 |
Oracle新手最常碰到的6个错误及解决方案 |
Oracle Developer 2000中的一些实用语句 |
学习oracle sql loader 的使用 |
软件架构与设计 |
软件架构知识体系 |
Web应用开发方法研究 |
几种计算机软件应用体系结构模型… |
大型网站架构演变和知识体系 |
怎样成为优秀的软件模型设计者 |
项目需求稳定性与开发模型选择 |
软件项目管理原则 |
Agile 敏捷建模思想 |
IT生活 |
社交生活的技巧 |
如何正确地向他人道歉 |
应该每日思考的5个有力理由及养成方法 |
立即行动的七个方法 |
怎样规划生活 |
你的行为合理吗 |
世界顶级精英们的人生哲学 |
构建人生的复原力 |
失败15种性格 |
作个真正的男人 |
每天问自己十个问题 |
成大事的九种手段 |
51招提升你的自信 |
困惑人生的62个问题以及答案 |
Web技术电子期刊2009年第1期(总第29期)
作者:admin 日期:2009-01-08
EMS企业网站管理系统
作者:admin 日期:2009-01-03
万事开头难,新的一年,我们必须推出新的东西才能让我们保持不断前进的动力。
EMS--EnterPrise Site Manage Suite 企业网站管理系统
为什么选择EMS?
我们开发,我们设计,我们利用Web标准,考虑用户操作的方便性,并基于现有最先进的开发技术,为的是为广大的企业拥有一个很好管理,很简单的一个网站管理系统,为的是这个系统能促进你企业的信息化速度加快,尽早踏上互联网电子商务之路。通过我们彼此之间的沟通与交流,让我们成为朋友,让你的企业网站能给你带来真正的效益
EMS有什么特点?
EMS企业网站管理系统基于Microsoft ASP.NET和C#语言开发.后台管理使用方便简单,前台可以自由设制。网站风格可以自己定制,同时开放所有源代码,为企业进行二次开发提供了基础。同时我们与使用者进行互动,欢迎大家发现问题并一起解决问题。
EMS有什么特点?
EMS企业网站管理系统刚刚开始发布,可能有很多地方不尽如人意或不太完善,会对你的使用造成一定的影响,对此我们深表歉意。我们会不断根据大家反馈的要求,及时、迅速的提供解决方案,尽最大的力量与你一道去解决问题,不断提高系统的安全性,优质性能,用户体验良好反馈。这一切,都需要你我的努力!
相关站点正在设计中,敬请等待.
解决方案下载(Src 源代码): 版本:Ver1.0 文件格式:rar文件
http://EMS.dezai.cn/SRC/DezaiStudio_EMS_Source.rar
开发手册下载(HandBook): 文件格式:chm文件
http://EMS.dezai.cn/HandBook/DezaiStudio_EMS_HandBookVer1.0.rar
编译版本下载(Release):
http://EMS.dezai.cn/Publish/DezaiStudio_EMS_ReleaseVer1.0.rar
在线演示站点地址:
http://EMS.dezai.cn/
后台管理地址演示:
http://EMS.dezai.cn/Manage/
用户名:dezai 密码:dezai
我们下次改版会计会有些什么改动?
1.系统的安全性能不是很强,我们会对系统的安全方面进行加强。
2.系统的整体风格仍然不统一,我们会对局部设计进行调整。
3.优化及整理相关代码及注释,方便代码阅读。
4.相关文件夹及控件的位置调整
5.漏洞及Bug的修补
万事开头难,刚刚出炉的东西总是很稚嫩的,请大家见谅.欢迎大家提出自己的建议,发现其中的Bug,并告诉我们。让我们一起做得更好!
EMS--EnterPrise Site Manage Suite 企业网站管理系统
为什么选择EMS?
我们开发,我们设计,我们利用Web标准,考虑用户操作的方便性,并基于现有最先进的开发技术,为的是为广大的企业拥有一个很好管理,很简单的一个网站管理系统,为的是这个系统能促进你企业的信息化速度加快,尽早踏上互联网电子商务之路。通过我们彼此之间的沟通与交流,让我们成为朋友,让你的企业网站能给你带来真正的效益
EMS有什么特点?
EMS企业网站管理系统基于Microsoft ASP.NET和C#语言开发.后台管理使用方便简单,前台可以自由设制。网站风格可以自己定制,同时开放所有源代码,为企业进行二次开发提供了基础。同时我们与使用者进行互动,欢迎大家发现问题并一起解决问题。
EMS有什么特点?
EMS企业网站管理系统刚刚开始发布,可能有很多地方不尽如人意或不太完善,会对你的使用造成一定的影响,对此我们深表歉意。我们会不断根据大家反馈的要求,及时、迅速的提供解决方案,尽最大的力量与你一道去解决问题,不断提高系统的安全性,优质性能,用户体验良好反馈。这一切,都需要你我的努力!
相关站点正在设计中,敬请等待.
解决方案下载(Src 源代码): 版本:Ver1.0 文件格式:rar文件
http://EMS.dezai.cn/SRC/DezaiStudio_EMS_Source.rar
开发手册下载(HandBook): 文件格式:chm文件
http://EMS.dezai.cn/HandBook/DezaiStudio_EMS_HandBookVer1.0.rar
编译版本下载(Release):
http://EMS.dezai.cn/Publish/DezaiStudio_EMS_ReleaseVer1.0.rar
在线演示站点地址:
http://EMS.dezai.cn/
后台管理地址演示:
http://EMS.dezai.cn/Manage/
用户名:dezai 密码:dezai
我们下次改版会计会有些什么改动?
1.系统的安全性能不是很强,我们会对系统的安全方面进行加强。
2.系统的整体风格仍然不统一,我们会对局部设计进行调整。
3.优化及整理相关代码及注释,方便代码阅读。
4.相关文件夹及控件的位置调整
5.漏洞及Bug的修补
万事开头难,刚刚出炉的东西总是很稚嫩的,请大家见谅.欢迎大家提出自己的建议,发现其中的Bug,并告诉我们。让我们一起做得更好!
用户权限管理设计(2)
作者:admin 日期:2008-12-23
上篇讲完了数据库的设计,这次我们讲讲在Net中的实现
UI的实现,主要是方便用户操作,考虑用户体验,这个没有什么好说的
后台管理菜单
角色管理列表
新增用户
权限分配
现在,我们根据数据库生成实体类。实体类的设计一般跟数据库的字段相差不大,可以用相关的ORM帮你生成
我们再看看BLL层
我这里是用户-角色的代码,其它的只要根据数据库存储过程就可以看出对应的方法是什么的
UI的实现,主要是方便用户操作,考虑用户体验,这个没有什么好说的
后台管理菜单
角色管理列表
新增用户
权限分配
现在,我们根据数据库生成实体类。实体类的设计一般跟数据库的字段相差不大,可以用相关的ORM帮你生成
我们再看看BLL层
我这里是用户-角色的代码,其它的只要根据数据库存储过程就可以看出对应的方法是什么的
复制内容到剪贴板 程序代码
/// <summary>
/// UserRole业务逻辑层
/// </summary>
public class MemberRole:ABC.IDAL.Sys.IMemberRole
{
private static readonly ABC.IDAL.Sys.IMemberRole dal = ABC.DALFactory.DataAccess.CreateMemberRole();
/// <summary>
/// 增加
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Insert(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Insert(Model);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Update(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Update(Model);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="memberRoleID"></param>
/// <returns>bool</return...
/// UserRole业务逻辑层
/// </summary>
public class MemberRole:ABC.IDAL.Sys.IMemberRole
{
private static readonly ABC.IDAL.Sys.IMemberRole dal = ABC.DALFactory.DataAccess.CreateMemberRole();
/// <summary>
/// 增加
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Insert(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Insert(Model);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Update(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Update(Model);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="memberRoleID"></param>
/// <returns>bool</return...
用户权限管理设计(1)
作者:admin 日期:2008-12-13
用户管理权限设计一直是大家讨论的热点,因为几乎涉及到每一个开发的业务系统。我找了很多很多的资料,大家的核心基本上都是一样的:基于角色管理. 用户,角色,模块,权限的相互组合,就可以形成一个强大的权限管理系统。
最近在一个项目中设计的一个用户权限的设计,很乐意与大家一起讨论及分享.
设计思路
我的设计思路或者说是我想要实现的功能
1.用户的权限通过角色来控制,一个用户可以拥有多个角色.
2.用户拥有不同角色时,其权限应该是多个角色相互的补集.
3.一个角色拥有多个模块
4.用户的前台菜单显示根据角色所拥有的模块所决定,不同的用户在前端显示的操作菜单是不一样的。
5.页面中的功能按钮根据模块中所包含的功能所定义,通过模块及角色所拥有的权限进行控制
6.可看某个模块有哪些用户,哪些对应角色,并对其进行特殊权限设置.
7.可以针对单个用户进行特殊设置
我在我的Project中,基本上达到了以上的效果及功能,但在实际过程中发现有些不足之处。因为整个权限设计是基于数据库来设计中,所以数据的读取当数据量大时(我所说的数据量是以万以上来计)可能对性能有一定的影响。但对于一般来说,几千用户之类的我想还是可以承受的。我会在后面说明不足之处。
数据库设计
基本设计:
1.首先,设计数据库.
数据库的设计其实我估计大家都很熟悉了
基本表:用户表,角色表,模块表,功能表,管理员表.如果涉及到企业性质的,可能会根据需要加上组织结构表,群组表等其它辅助表
用户
管理员
角色
模块
(我的模块表考虑了子模块的因素,所以会有深度,父模块ID这两个字段,在后来开发过中,由于思路的转变,IsRootModule,FunctionCode我都没有用到,为了让整个权限系统通变得更通用,我都将其单独设计成了另一个表)
功能表(功能表就是模块对应的功能:增加,删除,修改,详细,列表,浏览,导出,导入之类的)
业务表:用户-角色表 模块-功能表 角色-模块表
要实现一个用户多个角色(1 to n),一个角色多个模块(1 to n),一个模块多个功能(1 to n),那就得加上几个相关的业务表,之前考虑用视图去实现,我个人之见,视图最好只用来读取数据,不要用来进行数据操作.后来证明是不可取的,这里要注意的就是在实际的业务操作中,应该尽量避免重复的数据录入. 这些表都很简单,但却很关键
用户-角色:
角色-模块:
模块-功能:
大家可以看到,表结构很简单,字段也很少,设计也差不多。都是将相关联的字段ID取出来做数据存取。
视图:用户-角色-模块-功能视图
可能大家会觉得很奇怪,为什么这里出现member_role呢。因为我们在数据表中只存取了ID值,而对应的RoleName字段并没有包含其中,这里的视图就是获取关联表中其他所需要的字段数据了。另外两个视图大家看名字应该就知道他的用处了。
存储过程:各自表的增加,删除,修改,及列表数据. 判断是否存在相同的数据
(CUDLIS-Create, Update,Delete,IfExist,Show,List)
存储过程我就不一一列出了,很简单的,你只要写出下面这些基本上你在开发过程就不会有太多问题了. 注意的是:在相互关联的业务表中,最好能对数据插入进行重复数据判断(用户角色表,模块功能表,角色模块表,尽量避免重复的数据插入)我把大致需要实现的业务列个表给大家参考:
用户表:(Insert ,Update ,IfExist ,Show, Delete)
用户角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)
角色表:(Insert,Update,IfExist,Show,Delete)
角色模块表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)
模块表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)
模块功能表:(Insert,Update,Delete,FunctionListByModuleID)
针对用户直接获取其所有的权限时,应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据,这样就可以得到想要的东西了。
数据库设计部分应该就这样差不多了。我想这应该是通用的。在实际运用过程中,我个人认为应该有一些改进点:
1.模块与功能部分,可以用字符串的形式将模块对应的功能存在一个数据字段中,这样可能在你的代码编写中可以省下较多的时间并带来更多的便利(主要是可以用split()来代替频繁的数据获取业务)这个我在最初设计中没有想到这点,有点失策.
2.针对N级模块的权限展现问题,如何让父模块继承子模块的权限这个是我没有考虑到的,不过我想应该可以用IsRootModule这个字段来作文章,可惜我还没想到如何去整这个字段。当子模块很多时,在前端UI展示的时候是否会出现很慢的情况?这个我没有去做测试。带有一定的风险
但在前端UI展示我还没想到或实现好的办法,我能想到的应该是像GridViewTree那种不错。
这个权限设计已经在我的Project中运用,暂时没有发现什么问题,而且为我以后对其它系统集成也很有帮助。至于如何在C#中实现业务,个人认为只要知道数据库如何整的,那C#中的业务实现只是一个取数操作过程。下篇与大家再共同分享讨论.
最近在一个项目中设计的一个用户权限的设计,很乐意与大家一起讨论及分享.
设计思路
我的设计思路或者说是我想要实现的功能
1.用户的权限通过角色来控制,一个用户可以拥有多个角色.
2.用户拥有不同角色时,其权限应该是多个角色相互的补集.
3.一个角色拥有多个模块
4.用户的前台菜单显示根据角色所拥有的模块所决定,不同的用户在前端显示的操作菜单是不一样的。
5.页面中的功能按钮根据模块中所包含的功能所定义,通过模块及角色所拥有的权限进行控制
6.可看某个模块有哪些用户,哪些对应角色,并对其进行特殊权限设置.
7.可以针对单个用户进行特殊设置
我在我的Project中,基本上达到了以上的效果及功能,但在实际过程中发现有些不足之处。因为整个权限设计是基于数据库来设计中,所以数据的读取当数据量大时(我所说的数据量是以万以上来计)可能对性能有一定的影响。但对于一般来说,几千用户之类的我想还是可以承受的。我会在后面说明不足之处。
数据库设计
基本设计:
1.首先,设计数据库.
数据库的设计其实我估计大家都很熟悉了
基本表:用户表,角色表,模块表,功能表,管理员表.如果涉及到企业性质的,可能会根据需要加上组织结构表,群组表等其它辅助表
用户
管理员
角色
模块
(我的模块表考虑了子模块的因素,所以会有深度,父模块ID这两个字段,在后来开发过中,由于思路的转变,IsRootModule,FunctionCode我都没有用到,为了让整个权限系统通变得更通用,我都将其单独设计成了另一个表)
功能表(功能表就是模块对应的功能:增加,删除,修改,详细,列表,浏览,导出,导入之类的)
业务表:用户-角色表 模块-功能表 角色-模块表
要实现一个用户多个角色(1 to n),一个角色多个模块(1 to n),一个模块多个功能(1 to n),那就得加上几个相关的业务表,之前考虑用视图去实现,我个人之见,视图最好只用来读取数据,不要用来进行数据操作.后来证明是不可取的,这里要注意的就是在实际的业务操作中,应该尽量避免重复的数据录入. 这些表都很简单,但却很关键
用户-角色:
角色-模块:
模块-功能:
大家可以看到,表结构很简单,字段也很少,设计也差不多。都是将相关联的字段ID取出来做数据存取。
视图:用户-角色-模块-功能视图
可能大家会觉得很奇怪,为什么这里出现member_role呢。因为我们在数据表中只存取了ID值,而对应的RoleName字段并没有包含其中,这里的视图就是获取关联表中其他所需要的字段数据了。另外两个视图大家看名字应该就知道他的用处了。
存储过程:各自表的增加,删除,修改,及列表数据. 判断是否存在相同的数据
(CUDLIS-Create, Update,Delete,IfExist,Show,List)
存储过程我就不一一列出了,很简单的,你只要写出下面这些基本上你在开发过程就不会有太多问题了. 注意的是:在相互关联的业务表中,最好能对数据插入进行重复数据判断(用户角色表,模块功能表,角色模块表,尽量避免重复的数据插入)我把大致需要实现的业务列个表给大家参考:
用户表:(Insert ,Update ,IfExist ,Show, Delete)
用户角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)
角色表:(Insert,Update,IfExist,Show,Delete)
角色模块表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)
模块表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)
模块功能表:(Insert,Update,Delete,FunctionListByModuleID)
针对用户直接获取其所有的权限时,应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据,这样就可以得到想要的东西了。
数据库设计部分应该就这样差不多了。我想这应该是通用的。在实际运用过程中,我个人认为应该有一些改进点:
1.模块与功能部分,可以用字符串的形式将模块对应的功能存在一个数据字段中,这样可能在你的代码编写中可以省下较多的时间并带来更多的便利(主要是可以用split()来代替频繁的数据获取业务)这个我在最初设计中没有想到这点,有点失策.
2.针对N级模块的权限展现问题,如何让父模块继承子模块的权限这个是我没有考虑到的,不过我想应该可以用IsRootModule这个字段来作文章,可惜我还没想到如何去整这个字段。当子模块很多时,在前端UI展示的时候是否会出现很慢的情况?这个我没有去做测试。带有一定的风险
但在前端UI展示我还没想到或实现好的办法,我能想到的应该是像GridViewTree那种不错。
这个权限设计已经在我的Project中运用,暂时没有发现什么问题,而且为我以后对其它系统集成也很有帮助。至于如何在C#中实现业务,个人认为只要知道数据库如何整的,那C#中的业务实现只是一个取数操作过程。下篇与大家再共同分享讨论.
ListBox与数据库的绑定操作
作者:admin 日期:2008-12-11
ListBox,DropDownList,checkBox这几个控件的属性跟使用方法几乎一样,在做系统的进修使用的频率也多。我这里主要与大家分享一下如何用listbox绑定数据据,及增加数据库,从列表中移除选择项的几个操作方法。其实用javascript也完全可以实现。我这里是用服务器端控件与数据库绑定操作来实现的。各有各的的优缺点。
由上图可知:左边的ListBox我是通过DropDownList的选择来进行绑定数据的。所以ListBox是跟上面的部门DropDownList绑定的,所以我应该在DropdownList的selectedx_changed事件中写绑定ListBox的代码
int departmentID = Convert.ToInt32(ddlDepartment.SelectedValue); //获取Dropdownlist中的选择项的值并转成整型
BLL.Sys.Member bllMember = new ABC.BLL.Sys.Member(); //初始化一个BLL业务操作层的对象
if (bllMember.CountByDepartment(departmentID) != 0) //如果绑定的数据总数不为0的情况下
{
lstDeptMember.DataSource = bllMember.ListByDepartment(departmentID, 1, bllMember.CountByDepartment(departmentID)); //业务层绑定方法,也就是listBox的数据来源
lstDeptMember.DataValueField = "MemberID"; //绑定ListBox单项的选择值
lstDeptMember.DataTextField = "TrueName";//绑定ListBox单项的文字值
lstDeptMember.DataBind();
}
else
{
lstDeptMember.Items.Clear(); //清除ListBox的所有项目
ListItem item = new ListItem();
item.Text = "暂时无用户";
item.Value = string.Empty;
lstDeptMember.Items.Add(item);
}
加入所选用户
加入所选用户的Button是对右边所选择的值进行一个简单的for循环检测,选中的加到右边的ListBox中
if (lstDeptMember.SelectedIndex != -1) //lstDeptMember.SelectedIndex!=-1判定是否未选择
...
由上图可知:左边的ListBox我是通过DropDownList的选择来进行绑定数据的。所以ListBox是跟上面的部门DropDownList绑定的,所以我应该在DropdownList的selectedx_changed事件中写绑定ListBox的代码
复制内容到剪贴板 程序代码
int departmentID = Convert.ToInt32(ddlDepartment.SelectedValue); //获取Dropdownlist中的选择项的值并转成整型
BLL.Sys.Member bllMember = new ABC.BLL.Sys.Member(); //初始化一个BLL业务操作层的对象
if (bllMember.CountByDepartment(departmentID) != 0) //如果绑定的数据总数不为0的情况下
{
lstDeptMember.DataSource = bllMember.ListByDepartment(departmentID, 1, bllMember.CountByDepartment(departmentID)); //业务层绑定方法,也就是listBox的数据来源
lstDeptMember.DataValueField = "MemberID"; //绑定ListBox单项的选择值
lstDeptMember.DataTextField = "TrueName";//绑定ListBox单项的文字值
lstDeptMember.DataBind();
}
else
{
lstDeptMember.Items.Clear(); //清除ListBox的所有项目
ListItem item = new ListItem();
item.Text = "暂时无用户";
item.Value = string.Empty;
lstDeptMember.Items.Add(item);
}
加入所选用户
加入所选用户的Button是对右边所选择的值进行一个简单的for循环检测,选中的加到右边的ListBox中
复制内容到剪贴板 程序代码
if (lstDeptMember.SelectedIndex != -1) //lstDeptMember.SelectedIndex!=-1判定是否未选择
...
Web技术电子期刊2008年第12期(总第28期)
作者:admin 日期:2008-12-09
[译]连接池和 "Timeout expired"异常
作者:admin 日期:2008-11-27
原文标题:Connection Pooling and the "Timeout expired" exception FAQ
来源:http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx
作者:angelsb
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Timeout expired 异常是个很棘手的异常,想必几乎每个人都碰到过。有时可真是对它咬牙切齿,拿它没办法。 angelsb这篇文章很好,希望对大家有用。我也是看到他讲得很好,才翻译过来的,水平有限,请多多指教.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
哎!在另一个进程中,又出现了连接池已满的问题,这是个最让人头痛却又是最常出现的连接池问题之一.原因是在开发过程中很少碰到这个头痛的问题,但在部署APP到客户端时,却总是不经意地跑出来了.我想,我应该花些许时间对这个问题进行一次完整的总结吧.
发生的本质是什么?
我们来认真看一下可能会发生这种异常的两种情况
1) 你使用了超过最大的连接池连接数(默认的最大连接数是100)
在大部分应用程序中,这种情况是很少出现的. 毕竟当你使用连接池时,100个并行连接是一个非常大的数字.根据我的经验,会造成这种异常的原因的最大可能,应该是在一个纯种下打开了100个连接.
SqlConnection[] connectionArray = new SqlConnection[101];
for (int i = 0; i <= 100; i++)
{
connectionArray = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
connectionArray[i].Open();
}
解决方案:如果你确定你将会使用超过100个并行连接(在同一连接字符串上),你可以增加最大连接数.
2) 连接泄漏
我个人认为的连接泄漏定义是你打开了一个连接但你没有在你的代码中执行close()或dispose().这范围不仅仅是你忘记了在connection后连接后使用dispose()或close()对期进行关闭,还包括一些你已经在相关connection后写好了close()却根本没有起作用的情況.我们来看看下面的代码:
using System;
using System.Data;
using System.Data.SqlClient;
public class Repro
{
public static int Main(string[] args)
{
Repro repro = new Repro();
for (int i = 0; i <= 5000; i++)
{
try{ Console.Write(i+" "); repro.LeakConnections(); }
catch (SqlException){}
}
return 1;
}
public void LeakConnections()
{
SqlConnection sqlconnection1 = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
sqlconnection1.Open();
SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
sql...[/i]
来源:http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx
作者:angelsb
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Timeout expired 异常是个很棘手的异常,想必几乎每个人都碰到过。有时可真是对它咬牙切齿,拿它没办法。 angelsb这篇文章很好,希望对大家有用。我也是看到他讲得很好,才翻译过来的,水平有限,请多多指教.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
哎!在另一个进程中,又出现了连接池已满的问题,这是个最让人头痛却又是最常出现的连接池问题之一.原因是在开发过程中很少碰到这个头痛的问题,但在部署APP到客户端时,却总是不经意地跑出来了.我想,我应该花些许时间对这个问题进行一次完整的总结吧.
发生的本质是什么?
我们来认真看一下可能会发生这种异常的两种情况
1) 你使用了超过最大的连接池连接数(默认的最大连接数是100)
在大部分应用程序中,这种情况是很少出现的. 毕竟当你使用连接池时,100个并行连接是一个非常大的数字.根据我的经验,会造成这种异常的原因的最大可能,应该是在一个纯种下打开了100个连接.
复制内容到剪贴板 程序代码
SqlConnection[] connectionArray = new SqlConnection[101];
for (int i = 0; i <= 100; i++)
{
connectionArray = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
connectionArray[i].Open();
}
解决方案:如果你确定你将会使用超过100个并行连接(在同一连接字符串上),你可以增加最大连接数.
2) 连接泄漏
我个人认为的连接泄漏定义是你打开了一个连接但你没有在你的代码中执行close()或dispose().这范围不仅仅是你忘记了在connection后连接后使用dispose()或close()对期进行关闭,还包括一些你已经在相关connection后写好了close()却根本没有起作用的情況.我们来看看下面的代码:
复制内容到剪贴板 程序代码
using System;
using System.Data;
using System.Data.SqlClient;
public class Repro
{
public static int Main(string[] args)
{
Repro repro = new Repro();
for (int i = 0; i <= 5000; i++)
{
try{ Console.Write(i+" "); repro.LeakConnections(); }
catch (SqlException){}
}
return 1;
}
public void LeakConnections()
{
SqlConnection sqlconnection1 = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
sqlconnection1.Open();
SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
sql...
the page contains markup that is not valid 解决办法
作者:admin 日期:2008-11-13
问题描述:
the page contains markup that is not valid when attached to a master page 当使用了样式跟皮肤的时候,打开.aspx页,就会出现这个东西了。不知是不是Bug
这是MSDN的反馈:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=314745
我的解决办法很奇怪:
打开Source视图:
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<uc1:Add ID="Add1" runat="server" />
</asp:Content>
在这里随便打一个回车再返回到view视图就可以了~~~
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<uc1:Add ID="Add1" runat="server" />
</asp:Content>
//注意区别:我上面多了两个空行
我查了一下国外的资料,还有一种方法是:
将aspx或master里面的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
换成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
这种方法没有试过,大家可以试一下。
小记一下。但愿能给您带来帮助.
Web技术电子期刊2008年第10 11期(总第27期)
作者:admin 日期:2008-11-07
[译]使用ASP.NET2.0生成Excel报表
作者:admin 日期:2008-10-13
文章来源:
http://www.beansoftware.com/asp.net-tutorials/generating-excel-reports.aspx
文章作者:Sushmita Kumari
这是一篇很老的文章了,很长时间没有翻译文章,拿来练一练. 同时把作者的VB版,改成了C#版
源文件:
点击下载此文件
Excel几乎是所有公司都要用来分析数据的一个超级工具,然而十年后的互联网已不可日而语,几乎所有的呈现的数据都是动态生成的,也就是说通过一个数据库里的数据交互产生所要的数据结果.有时,我们可能需在一个Excel的文件中,通过使用Excel的某些特性让分析的数据更好的适应我们的需要并呈现出来.在这篇文章中,我们可以学习到如何与Excel文件中的数据进行包括读写的交互操作.
相关源文件下载:
点击下载此文件
相关的文件:为了更好的演示本文章,我们先找到了一个一个包含学生分数数据的一个Excel文件.里面的数据都是随机的.
Excel - ASP.NET Scenarios
让我们新建一个接口从Excel文件中获取数据.如图
注意引入以下组件及命名空间:
VB Code
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
Try
Dim strExcelConn As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString()
Dim dbConn As New OleDbConnection(strExcelConn)
Dim strSQL As String
strSQL = "Select * FROM [" & cmbSheets.SelectedItem.ToString() & "$]"
dbConn.Open()
Dim cmd As New OleDbCommand(strSQL, dbConn)
Dim dsExcel As New DataSet
Dim daExcel As New OleDbDataAdapter(cmd)
daExcel.Fill(dsExcel)
dgResults.DataSource = dsExcel
dgResults.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
C# Code
protected void btnSearch_Click(object sender, System.EventArgs e)
{
try {
string strExcelConn = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString();
OleDbConnection dbConn = new OleDbConnection(strExcelConn);
string strSQL;
...
http://www.beansoftware.com/asp.net-tutorials/generating-excel-reports.aspx
文章作者:Sushmita Kumari
这是一篇很老的文章了,很长时间没有翻译文章,拿来练一练. 同时把作者的VB版,改成了C#版
源文件:
点击下载此文件
Excel几乎是所有公司都要用来分析数据的一个超级工具,然而十年后的互联网已不可日而语,几乎所有的呈现的数据都是动态生成的,也就是说通过一个数据库里的数据交互产生所要的数据结果.有时,我们可能需在一个Excel的文件中,通过使用Excel的某些特性让分析的数据更好的适应我们的需要并呈现出来.在这篇文章中,我们可以学习到如何与Excel文件中的数据进行包括读写的交互操作.
相关源文件下载:
点击下载此文件
相关的文件:为了更好的演示本文章,我们先找到了一个一个包含学生分数数据的一个Excel文件.里面的数据都是随机的.
Excel - ASP.NET Scenarios
让我们新建一个接口从Excel文件中获取数据.如图
注意引入以下组件及命名空间:
复制内容到剪贴板 程序代码
Imports System.Data.OleDb
Imports System.Data
Imports System.Data
VB Code
复制内容到剪贴板 程序代码
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
Try
Dim strExcelConn As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString()
Dim dbConn As New OleDbConnection(strExcelConn)
Dim strSQL As String
strSQL = "Select * FROM [" & cmbSheets.SelectedItem.ToString() & "$]"
dbConn.Open()
Dim cmd As New OleDbCommand(strSQL, dbConn)
Dim dsExcel As New DataSet
Dim daExcel As New OleDbDataAdapter(cmd)
daExcel.Fill(dsExcel)
dgResults.DataSource = dsExcel
dgResults.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
C# Code
复制内容到剪贴板 程序代码
protected void btnSearch_Click(object sender, System.EventArgs e)
{
try {
string strExcelConn = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString();
OleDbConnection dbConn = new OleDbConnection(strExcelConn);
string strSQL;
...
Web技术电子期刊2008年第9期(总第26期)
作者:admin 日期:2008-09-27
Sandcastle生成项目文档手册
作者:admin 日期:2008-09-20
用过NDOC的对生成CHM的项目文档应该不会陌生,可惜那丫居然不再做下去了。还好,MS公司的Sandcastle顶上来了,当然,现在很多高手们也在不断地开发类似NDOC这样的文档生成工具。但用来用去,还是这个比较喜欢,可以自动把其它语言代码也同时生成(类似MSDN)一样。可是网上对这个东东都是一些介绍性的文档,没有说如何使用,这里就把我使用的过程供大家分享,一起学习.
当然,我所说的这工具,是在VS。NET开发环境实现,Java好像也有同样的生成工具的。
Sandcastle生成的输出结果具有以下特点:
类似于MSDN布局的界面。
自动生成索引项、内容项目表、主题块和页面布局,提高一致性和熟悉程度。
自动生成语法宣称部分。
自动生成继承表。
代码彩色化。
提供多种风格和语言选择,终端用户可从中选择自己最喜欢的形式。
输出结果以HTML和CSS形式显示,微软承诺将来提供更多选择。
看到这样好的东西,我估计你也想试一试吧。呵呵。
使用前提:
在你的Solution里面的每个项目里,都会有一个Bin文件夹,同时你必须要让你的项目能生成一个XML文件.(在属性里面设置xml document file),除此之外,在每个方法或函数里面都要写上对应的注释。
如图:
怎么让项目生成一个XML document file
代码中对应的注释:在每个方法前加三个斜杠 /// 会自动出来
做好了以上这两个前提准备,你的Bin文件下就应该有Sandcastle的东东了。
[em11]
[下载]
废话少说,先去当一个Sandcastle再说
还好,MS免费提供了下载:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en
如果对这个玩艺儿有意思的话,可以去下载源码研究一下,开源嘛,不研究一下对不起脑子。
下载地址:
https://blogs.msdn.com/sandcastle/
[安装]
安装就不用我劳神吧,搞code不会装那实在是说不过去了吧,孩子。[em13]
安装好后记住安装位置
在安装位置中找到build_Sandcastle.bat这个批处理文件
Sandcastle\Examples\sandcastle\里面
这里提供一个xcopy.exe的系统文件,好像是用来COPY系统中的一些有用的文件的吧(放心,没毒)
点击下载此文件
然后,把你的项目的XML,DLL文件与xcopy.exe build_Sandcastle.bat 放在一起
[使用]
注:我这里采用的是命令行形式,如果要使用GUI方式生成,可以去下载一个
SandcastleGUI.exe (v1.47 - August 2008)
下载地址:http://www.inchl.nl/SandcastleGUI/
打开命令窗口,进入到你的文档所在的文件夹(就是把xml dll xcopy.exe build_Sandcastle.bat 装在一起的那个)
假设我要对IDAL.DLL这个生成文档,刚运行如下命令:
build_Sandcastle vs2005 abc.idal
你就可以在这个文件夹里看到一个CHM文件跟几个相关的文件夹了
如要你觉得上面的操作都比较麻烦,那你可以去下载一个 Sandcastle Help File Builder
你只要根据自己的项目去设定相关属性,同样可以生出chm鸡蛋来,更令人惊喜的是可以生出一个Net的网站!
操作界面跟NDOC类似
生成出来的类似MSDN的文档页面
除了上面这个插件外,Sandcastle 还可以通过 DocProject for Sandcastle 与 VS2005 VS2008集合在一起,以向导方式生出相关的文档来,具体的就不再述说了。大家可以看看下面这几个链接就知道了。
Sandcastle Help File Builder
http://www.codeplex.com/SHFB
DocProject for Sandcastle
http://www.codeplex.com/DocProject
AjaxDoc
http://www.codeplex.com/ajaxdoc
一点小经验,与大家分享,多多支持。[em13]
当然,我所说的这工具,是在VS。NET开发环境实现,Java好像也有同样的生成工具的。
Sandcastle生成的输出结果具有以下特点:
类似于MSDN布局的界面。
自动生成索引项、内容项目表、主题块和页面布局,提高一致性和熟悉程度。
自动生成语法宣称部分。
自动生成继承表。
代码彩色化。
提供多种风格和语言选择,终端用户可从中选择自己最喜欢的形式。
输出结果以HTML和CSS形式显示,微软承诺将来提供更多选择。
看到这样好的东西,我估计你也想试一试吧。呵呵。
使用前提:
在你的Solution里面的每个项目里,都会有一个Bin文件夹,同时你必须要让你的项目能生成一个XML文件.(在属性里面设置xml document file),除此之外,在每个方法或函数里面都要写上对应的注释。
如图:
怎么让项目生成一个XML document file
代码中对应的注释:在每个方法前加三个斜杠 /// 会自动出来
做好了以上这两个前提准备,你的Bin文件下就应该有Sandcastle的东东了。
[em11]
[下载]
废话少说,先去当一个Sandcastle再说
还好,MS免费提供了下载:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en
如果对这个玩艺儿有意思的话,可以去下载源码研究一下,开源嘛,不研究一下对不起脑子。
下载地址:
https://blogs.msdn.com/sandcastle/
[安装]
安装就不用我劳神吧,搞code不会装那实在是说不过去了吧,孩子。[em13]
安装好后记住安装位置
在安装位置中找到build_Sandcastle.bat这个批处理文件
Sandcastle\Examples\sandcastle\里面
这里提供一个xcopy.exe的系统文件,好像是用来COPY系统中的一些有用的文件的吧(放心,没毒)
点击下载此文件
然后,把你的项目的XML,DLL文件与xcopy.exe build_Sandcastle.bat 放在一起
[使用]
注:我这里采用的是命令行形式,如果要使用GUI方式生成,可以去下载一个
SandcastleGUI.exe (v1.47 - August 2008)
下载地址:http://www.inchl.nl/SandcastleGUI/
打开命令窗口,进入到你的文档所在的文件夹(就是把xml dll xcopy.exe build_Sandcastle.bat 装在一起的那个)
假设我要对IDAL.DLL这个生成文档,刚运行如下命令:
build_Sandcastle vs2005 abc.idal
你就可以在这个文件夹里看到一个CHM文件跟几个相关的文件夹了
如要你觉得上面的操作都比较麻烦,那你可以去下载一个 Sandcastle Help File Builder
你只要根据自己的项目去设定相关属性,同样可以生出chm鸡蛋来,更令人惊喜的是可以生出一个Net的网站!
操作界面跟NDOC类似
生成出来的类似MSDN的文档页面
除了上面这个插件外,Sandcastle 还可以通过 DocProject for Sandcastle 与 VS2005 VS2008集合在一起,以向导方式生出相关的文档来,具体的就不再述说了。大家可以看看下面这几个链接就知道了。
Sandcastle Help File Builder
http://www.codeplex.com/SHFB
DocProject for Sandcastle
http://www.codeplex.com/DocProject
AjaxDoc
http://www.codeplex.com/ajaxdoc
一点小经验,与大家分享,多多支持。[em13]
Cookies的基本操作
作者:admin 日期:2008-09-10
Cookies的概念就不用哆嗦了,大家都很常用。不过我好像很少用,呵呵。
1.创建Cookies
using System;
// Use this line when you want to save a cookie
Response.Cookies["MyCookieName"].Value = "MyCookieValue";
// How long will cookie exist on client hard disk
Response.Cookies["MyCookieName"].Expires = DateTime.Now.AddDays(1);
// To add multiple key/value pairs in single cookie
Response.Cookies["VisitorData"]["FirstName"] = "Richard";
Response.Cookies["VisitorData"]["LastVisit"] = DateTime.Now.ToString();
2.读取Cookies
string MyCookieValue;
// We need to perform this check first, to avoid null exception
// if cookie not exists
if(Request.Cookies["MyCookieName"] != null)
MyCookieValue = Request.Cookies["MyCookieName"].Value;
3.删除Cookies
// First check if cookie exists
if (Request.Cookies["MyCookieName"] != null)
{
// Set its expiration time somewhere in the past
Response.Cookies["MyCookieName"].Expires = DateTime.Now.AddDays(-1);
4.使用HttpCookie class 这个类
参考MSDN:
http://msdn.microsoft.com/zh-tw/library/system.web.httpcookie(VS.80).aspx
几个常用属性:
属性的使用方法就跟其他类使用一样:
HttpCookie MyGreatCookie = new HttpCookie("MyCookieName");
MyGreatCookie.Value = "Some cookie value";
MyGreatCookie.Expires = DateTime.Now.AddDays(100);
Response.Cookies.Add(MyGreatCookie);
5.Cookies的一些限制
<1> Cookies的存储大小为4096 字节,一般只会用来存储一些数据量较小的信息
<2>每个Cookies的数量在一个网站上不能超过20个,当你超过20个时,老的会删除掉
<3>用户可以在浏览器中设置是否接受或启用Cookies,如果设置了否,Cookies就不能作为存储状态的工具,所以一般都会在使用Cookies之前检测一下浏览器是否启用了Cookies
6.如何确定是否使用了Cookies
End If
[ C# ]
if (Request.Browser.Cookies)
{
// Cookies supported
}
else
{
// Web browser not supports cookies
}
7.使用Cookies的场合
一般对用户比较敏感的数据都不建议使用Cookies来存储,它只是一些普通的文本,但是如果您想使用“记住我的状态”或“直接登录”这样的小功能来增加系统的操作简便性,这时Cookies就可以派上用场了.总的来说:用来保持用户在同一Website同一操作方式时是最好的使用方式
1.创建Cookies
复制内容到剪贴板 程序代码
using System;
// Use this line when you want to save a cookie
Response.Cookies["MyCookieName"].Value = "MyCookieValue";
// How long will cookie exist on client hard disk
Response.Cookies["MyCookieName"].Expires = DateTime.Now.AddDays(1);
// To add multiple key/value pairs in single cookie
Response.Cookies["VisitorData"]["FirstName"] = "Richard";
Response.Cookies["VisitorData"]["LastVisit"] = DateTime.Now.ToString();
2.读取Cookies
复制内容到剪贴板 程序代码
string MyCookieValue;
// We need to perform this check first, to avoid null exception
// if cookie not exists
if(Request.Cookies["MyCookieName"] != null)
MyCookieValue = Request.Cookies["MyCookieName"].Value;
3.删除Cookies
复制内容到剪贴板 程序代码
// First check if cookie exists
if (Request.Cookies["MyCookieName"] != null)
{
// Set its expiration time somewhere in the past
Response.Cookies["MyCookieName"].Expires = DateTime.Now.AddDays(-1);
4.使用HttpCookie class 这个类
参考MSDN:
http://msdn.microsoft.com/zh-tw/library/system.web.httpcookie(VS.80).aspx
几个常用属性:
属性的使用方法就跟其他类使用一样:
复制内容到剪贴板 程序代码
HttpCookie MyGreatCookie = new HttpCookie("MyCookieName");
MyGreatCookie.Value = "Some cookie value";
MyGreatCookie.Expires = DateTime.Now.AddDays(100);
Response.Cookies.Add(MyGreatCookie);
5.Cookies的一些限制
<1> Cookies的存储大小为4096 字节,一般只会用来存储一些数据量较小的信息
<2>每个Cookies的数量在一个网站上不能超过20个,当你超过20个时,老的会删除掉
<3>用户可以在浏览器中设置是否接受或启用Cookies,如果设置了否,Cookies就不能作为存储状态的工具,所以一般都会在使用Cookies之前检测一下浏览器是否启用了Cookies
6.如何确定是否使用了Cookies
复制内容到剪贴板 程序代码
End If
[ C# ]
if (Request.Browser.Cookies)
{
// Cookies supported
}
else
{
// Web browser not supports cookies
}
7.使用Cookies的场合
一般对用户比较敏感的数据都不建议使用Cookies来存储,它只是一些普通的文本,但是如果您想使用“记住我的状态”或“直接登录”这样的小功能来增加系统的操作简便性,这时Cookies就可以派上用场了.总的来说:用来保持用户在同一Website同一操作方式时是最好的使用方式