通用权限管理系统组件 (GPM - General Permissions Manager) 中超级经典的.NET2.0静态数据库访问组件,附源码
2012-02-14 01:10 通用C#系统架构 阅读(2859) 评论(2) 编辑 收藏 举报最近有一个客户咨询能否单独用通用权限管理系统组件中的数据库访问组件,回答:“绝对ok”,这个组件是经历了多年的考验,是值得信任的一个数据库访问组件,正好情人节了,给大家也分享一下,接着在下一个文章里,写动态的数据库连接组件的用法。
静态的数据库组件的用法是非常简单的,功能也是相对简单的,他的特点就是支持多数据库、函数命名方式等编写规范,思路严谨,可重复利用的价值高,移植性也好,建议初学者多用此数据库访问组件会更好一些。
静态访问方法里不推荐采用数据库事务处理等,会在动态访问组里介绍此功能,还有一些超级复杂的功能,也不建议在自己的封装的组件里实现,那些超级个性化的的功能直接调用微软的方法就可以了,根本没封装的任意意义,其实封装太多也是画蛇添足的事情,没多大必要,适当的轻量级的封装就足够了。
参考的例子代码如下:
// All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd.
//-----------------------------------------------------------------
using System;
using System.Data;
using System.Collections.Generic;
using DotNet.Utilities;
using DotNet.Business;
/// <summary>
/// DbTools
/// 静态数据库访问的方法程序
///
/// 修改纪录
///
/// 2012-02-14 版本:1.0 JiRiGaLa 整理例子程序功能。
///
/// 版本:1.0
///
/// <author>
/// <name>JiRiGaLa</name>
/// <date>2012-02-14</date>
/// </author>
/// </summary>
public partial class DbTools : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 静态方法调用数据库的方法
this.StaticMethod();
}
private void StaticMethod()
{
// 设置数据库连接
DotNet.Utilities.DbHelper.DbConnection = "Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234;";
// 设置数据库类型
DotNet.Utilities.DbHelper.DbType = CurrentDbType.SqlServer;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Oracle;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.MySql;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.DB2;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.Access;
// DotNet.Utilities.DbHelper.DbType = CurrentDbType.SQLite;
this.Fill();
this.ExecuteNonQuery();
this.ExecuteScalar();
this.ExecuteReader();
}
/// <summary>
/// Fill
/// 静态方法调用数据库的方法
/// </summary>
private void Fill()
{
// 1:直接执行
string commandText = @"SELECT *
FROM BASE_USER
WHERE DeletionStateCode = 0";
DataTable dataTable = DotNet.Utilities.DbHelper.Fill(commandText);
// 2:防注入的安全的参数化运行方式执行查询
commandText = @" SELECT *
FROM BASE_USER
WHERE Code = " + DotNet.Utilities.DbHelper.GetParameter("Code")
+ " AND DeletionStateCode = " + DotNet.Utilities.DbHelper.GetParameter("DeletionStateCode");
// 这里是生成安全参数的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("Code", "jirigala"));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("DeletionStateCode", 0));
DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray());
// 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程
// 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦
commandText = "GET_USER";
dataTable = DotNet.Utilities.DbHelper.Fill(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
}
/// <summary>
/// ExecuteNonQuery
/// 静态方法调用数据库的方法
/// </summary>
/// <returns>影响行数</returns>
private int ExecuteNonQuery()
{
int returnValue = 0;
// 1:直接执行
string commandText = @"UPDATE BASE_USER
SET DELETIONSTATECODE = 0";
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText);
// 2:防注入的安全的参数化运行方式执行查询
commandText = @" UPDATE BASE_USER
SET DELETIONSTATECODE = 0
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter("Code")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter("DeletionStateCode");
// 这里是生成安全参数的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("Code", "jirigala"));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("DeletionStateCode", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray());
// 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程
// 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦
commandText = "UPDATE_USER";
returnValue = DotNet.Utilities.DbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteScalar
/// 静态方法调用数据库的方法
/// </summary>
/// <returns>结果</returns>
private object ExecuteScalar()
{
object returnValue = null;
// 1:直接执行
string commandText = @"SELECT CODE
FROM BASE_USER
WHERE DELETIONSTATECODE = 0";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText);
// 2:防注入的安全的参数化运行方式执行查询
commandText = @" SELECT CODE
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter("Code")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter("DeletionStateCode");
// 这里是生成安全参数的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("Code", "jirigala"));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("DeletionStateCode", 0));
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray());
// 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程
// 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦
commandText = "GET_USER";
returnValue = DotNet.Utilities.DbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
return returnValue;
}
/// <summary>
/// ExecuteReader
/// 静态方法调用数据库的方法
/// </summary>
private void ExecuteReader()
{
// 1:直接执行
string commandText = @"SELECT *
FROM BASE_USER
WHERE DELETIONSTATECODE = 0";
DotNet.Utilities.DbHelper.ExecuteReader(commandText);
// 2:防注入的安全的参数化运行方式执行查询
commandText = @" SELECT *
FROM BASE_USER
WHERE CODE = " + DotNet.Utilities.DbHelper.GetParameter("Code")
+ " AND DELETIONSTATECODE = " + DotNet.Utilities.DbHelper.GetParameter("DeletionStateCode");
// 这里是生成安全参数的方法
List<IDbDataParameter> dbParameters = new List<IDbDataParameter>();
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("Code", "jirigala"));
dbParameters.Add(DotNet.Utilities.DbHelper.MakeParameter("DeletionStateCode", 0));
DotNet.Utilities.DbHelper.ExecuteReader(commandText, dbParameters.ToArray());
// 3:执行存储过程,假设也是需要传递这2个参数,类似功能的一个存储过程
// 我们不建议用存储过程,因为会对系统移植,多数据库设计等上会遇到很多麻烦
commandText = "GET_USER";
DotNet.Utilities.DbHelper.ExecuteReader(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
}
}
例子程序下载地址如下:
.NET 2.0 数据库访问层源码在这里下载:
/Files/jirigala/DotNet.Utilities.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!