通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程
2012-01-18 14:50 通用C#系统架构 阅读(1983) 评论(4) 编辑 收藏 举报系统初始化的运行效果如下:
参数表是为了防止反复被初始化的,防止关键数据丢失。
其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下。
首先写了一个存储过程如下,把系统中的表都清理干净,存储过程的名字叫“SystemInitialize”
View Code
-- =============================================
-- Author: <吉日嘎拉>
-- Create date: <2012.01.18>
-- Description: <初始化系统>
-- =============================================
ALTER PROCEDURE [dbo].[SystemInitialize]
AS
BEGIN
SET NOCOUNT ON;
-- 检查是否已经初始化过系统?只允许初始化一次
DECLARE @Worked int;
SELECT @Worked = Worked FROM Base_Parameter WHERE ID = 10000000 AND ParameterContent = 'None';
IF @Worked > 0
BEGIN
RETURN;
END
-- 名片管理
TRUNCATE TABLE Base_Businesscard;
-- 评论表
TRUNCATE TABLE Base_Comment;
-- 联络单明细表
TRUNCATE TABLE Base_ContactDetails;
-- 联络单主表
TRUNCATE TABLE Base_Contact;
-- 系统异常表
TRUNCATE TABLE Base_Exception;
-- 文件表
TRUNCATE TABLE Base_File;
-- 文件夹表
TRUNCATE TABLE Base_Folder;
-- 数据字典主表(资源)
-- Base_Items
-- 工作流示例—请假单表
TRUNCATE TABLE Base_Leave;
-- 系统日志表
TRUNCATE TABLE Base_Log;
-- 消息表
TRUNCATE TABLE Base_Message;
-- 模块(菜单)表 通用权限以外的全删除
DELETE FROM Base_Module WHERE AllowDelete = 1;
-- 组织机构、部门表 删除的测试数据
DELETE FROM Base_Organize WHERE IsInnerOrganize = 1;
-- 新闻表
TRUNCATE TABLE Base_News;
-- 系统参数配置表
DELETE FROM Base_Parameter WHERE (ID <> 10000000);
-- 操作权限存储表
TRUNCATE TABLE Base_Permission;
-- 数据集权限存储表
TRUNCATE TABLE Base_PermissionScope;
-- 操作权限项定义 删除通用权限意外的全部权限定义
DELETE FROM Base_PermissionItem WHERE AllowDelete = 1;
-- 项目表
TRUNCATE TABLE Base_Project;
-- 员工(职员)表组织关系表
TRUNCATE TABLE Base_StaffOrganize;
-- 员工(职员)表
TRUNCATE TABLE Base_Staff;
-- 序列产生器表
TRUNCATE TABLE Base_Sequence;
-- 表字段结构定义说明
TRUNCATE TABLE Base_TableColumns;
-- 用户送货地址表
TRUNCATE TABLE Base_UserAddress;
-- 用户帐户组织关系表
TRUNCATE TABLE Base_UserOrganize;
-- 用户帐户角色关系表
TRUNCATE TABLE Base_UserRole;
-- 用户帐户表
DELETE FROM Base_User WHERE UserName != 'Administrator';
-- 系统角色表
DELETE FROM Base_Role WHERE Code != 'Administrators';
-- 工作日志表
TRUNCATE TABLE Base_WorkReport;
-- 设置已初始化标志,防止反复初始化系统
UPDATE Base_Parameter SET Worked = 1, ParameterContent = 'Processed' WHERE ID = 10000000;
END
-- Author: <吉日嘎拉>
-- Create date: <2012.01.18>
-- Description: <初始化系统>
-- =============================================
ALTER PROCEDURE [dbo].[SystemInitialize]
AS
BEGIN
SET NOCOUNT ON;
-- 检查是否已经初始化过系统?只允许初始化一次
DECLARE @Worked int;
SELECT @Worked = Worked FROM Base_Parameter WHERE ID = 10000000 AND ParameterContent = 'None';
IF @Worked > 0
BEGIN
RETURN;
END
-- 名片管理
TRUNCATE TABLE Base_Businesscard;
-- 评论表
TRUNCATE TABLE Base_Comment;
-- 联络单明细表
TRUNCATE TABLE Base_ContactDetails;
-- 联络单主表
TRUNCATE TABLE Base_Contact;
-- 系统异常表
TRUNCATE TABLE Base_Exception;
-- 文件表
TRUNCATE TABLE Base_File;
-- 文件夹表
TRUNCATE TABLE Base_Folder;
-- 数据字典主表(资源)
-- Base_Items
-- 工作流示例—请假单表
TRUNCATE TABLE Base_Leave;
-- 系统日志表
TRUNCATE TABLE Base_Log;
-- 消息表
TRUNCATE TABLE Base_Message;
-- 模块(菜单)表 通用权限以外的全删除
DELETE FROM Base_Module WHERE AllowDelete = 1;
-- 组织机构、部门表 删除的测试数据
DELETE FROM Base_Organize WHERE IsInnerOrganize = 1;
-- 新闻表
TRUNCATE TABLE Base_News;
-- 系统参数配置表
DELETE FROM Base_Parameter WHERE (ID <> 10000000);
-- 操作权限存储表
TRUNCATE TABLE Base_Permission;
-- 数据集权限存储表
TRUNCATE TABLE Base_PermissionScope;
-- 操作权限项定义 删除通用权限意外的全部权限定义
DELETE FROM Base_PermissionItem WHERE AllowDelete = 1;
-- 项目表
TRUNCATE TABLE Base_Project;
-- 员工(职员)表组织关系表
TRUNCATE TABLE Base_StaffOrganize;
-- 员工(职员)表
TRUNCATE TABLE Base_Staff;
-- 序列产生器表
TRUNCATE TABLE Base_Sequence;
-- 表字段结构定义说明
TRUNCATE TABLE Base_TableColumns;
-- 用户送货地址表
TRUNCATE TABLE Base_UserAddress;
-- 用户帐户组织关系表
TRUNCATE TABLE Base_UserOrganize;
-- 用户帐户角色关系表
TRUNCATE TABLE Base_UserRole;
-- 用户帐户表
DELETE FROM Base_User WHERE UserName != 'Administrator';
-- 系统角色表
DELETE FROM Base_Role WHERE Code != 'Administrators';
-- 工作日志表
TRUNCATE TABLE Base_WorkReport;
-- 设置已初始化标志,防止反复初始化系统
UPDATE Base_Parameter SET Worked = 1, ParameterContent = 'Processed' WHERE ID = 10000000;
END
在通用权限管理系统组件中调用存储过程的方法如下
View Code
private void btnInitialize_Click(object sender, EventArgs e)
{
// 默认按钮放在第2个按钮上,尽量防止误操作。
if (MessageBox.Show(AppMessage.MSG3000, AppMessage.MSG0000, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
// 按系统的配置信息动态获取数据库连接
using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))
{
try
{
// 打开数据库连接
dbHelper.Open(BaseSystemInfo.UserCenterDbConnection);
// 执行存储过程
int returnValue = dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, "SystemInitialize");
// 成功的提示信息
MessageBox.Show(AppMessage.MSG3010, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.btnInitialize.Enabled = false;
}
catch (Exception ex)
{
// 在本地文件中记录系统异常信息
this.WriteException(ex);
throw ex;
}
finally
{
// 关闭数据库库连接
dbHelper.Close();
}
}
}
}
{
// 默认按钮放在第2个按钮上,尽量防止误操作。
if (MessageBox.Show(AppMessage.MSG3000, AppMessage.MSG0000, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
// 按系统的配置信息动态获取数据库连接
using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))
{
try
{
// 打开数据库连接
dbHelper.Open(BaseSystemInfo.UserCenterDbConnection);
// 执行存储过程
int returnValue = dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, "SystemInitialize");
// 成功的提示信息
MessageBox.Show(AppMessage.MSG3010, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.btnInitialize.Enabled = false;
}
catch (Exception ex)
{
// 在本地文件中记录系统异常信息
this.WriteException(ex);
throw ex;
}
finally
{
// 关闭数据库库连接
dbHelper.Close();
}
}
}
}
判断当前用户是否已经登录,当前用户是否超级管理员,当前连接的数据库类型等的参考代码如下
View Code
public override void SetControlState()
{
// 已经登录了系统,并且是系统管理员才可以做这个服务器端的配置,第一次用时无法配置系统了
/*
if (!BaseSystemInfo.LogOned || !this.UserInfo.IsAdministrator)
{
this.tcConfirm.TabPages.Remove(tpServer);
}
*/
// 有并发数设置时,不允许重复登录。
if (this.nupOnLineLimit.Value > 0)
{
this.chkCheckOnLine.Checked = false;
this.chkCheckOnLine.Enabled = false;
}
else
{
this.chkCheckOnLine.Enabled = true;
}
// 只有系统管理员才可以初始化系统,并却是sqlserver数据库下才运行
this.btnInitialize.Visible = BaseSystemInfo.LogOned && BaseSystemInfo.UserInfo.IsAdministrator;
if (this.btnInitialize.Visible)
{
if (BaseSystemInfo.UserCenterDbType == DataBaseType.SqlServer)
{
string parameter = DotNetService.Instance.ParameterService.GetParameter(UserInfo, "System", "System", "Initialize");
if (!string.IsNullOrEmpty(parameter) && parameter.Equals("None"))
{
this.btnInitialize.Enabled = true;
}
}
}
}
{
// 已经登录了系统,并且是系统管理员才可以做这个服务器端的配置,第一次用时无法配置系统了
/*
if (!BaseSystemInfo.LogOned || !this.UserInfo.IsAdministrator)
{
this.tcConfirm.TabPages.Remove(tpServer);
}
*/
// 有并发数设置时,不允许重复登录。
if (this.nupOnLineLimit.Value > 0)
{
this.chkCheckOnLine.Checked = false;
this.chkCheckOnLine.Enabled = false;
}
else
{
this.chkCheckOnLine.Enabled = true;
}
// 只有系统管理员才可以初始化系统,并却是sqlserver数据库下才运行
this.btnInitialize.Visible = BaseSystemInfo.LogOned && BaseSystemInfo.UserInfo.IsAdministrator;
if (this.btnInitialize.Visible)
{
if (BaseSystemInfo.UserCenterDbType == DataBaseType.SqlServer)
{
string parameter = DotNetService.Instance.ParameterService.GetParameter(UserInfo, "System", "System", "Initialize");
if (!string.IsNullOrEmpty(parameter) && parameter.Equals("None"))
{
this.btnInitialize.Enabled = true;
}
}
}
}
给大家分享一下比较强大的完整的数据库访问组件,经过了7-8年的考研,运行稳定,编码风格良好,完整源码下载地址如下:
/Files/jirigala/DotNet.Utilities.rar
源码效果图如下:
将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。