ASP.NET对SQLServer的通用数据库访问类
作者:lijiao 发布时间:2024-01-23 19:21:20
标签:ASP.NET,SQLServer,数据库访问类
本文模仿实现数据库访问的通用类,代码清晰,而且很实用,包括了对数据库的所有的常用的操作。
/// <summary>
/// 数据库访问通用类
/// </summary>
public class SqlHelper
{
private string connectionString;
/// <summary>
/// 设定数据库访问字符串
/// </summary>
public string ConnectionString
{
set { connectionString = value; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="connectionString">数据库访问字符串</param>
public SqlHelper(string connectionString)
{
this.connectionString = connectionString;
}
/// <summary>
/// 执行一个查询,并返回查询结果
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="commandType">要执行的查询语句的类型,如存储过程或者sql文本命令</param>
/// <returns>返回查询结果集</returns>
public DataTable ExecuteDataTable(string sql,CommandType commandType)
{
return ExecuteDataTable(sql, commandType, null);
}
/// <summary>
/// 执行一个查询,并返回结果集
/// </summary>
/// <param name="sql">要执行的sql文本命令</param>
/// <returns>返回查询的结果集</returns>
public DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, CommandType.Text, null);
}
/// <summary>
/// 执行一个查询,并返回查询结果
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param>
/// <param name="parameters">Transact-SQL语句或者存储过程参数数组</param>
/// <returns></returns>
public DataTable ExecuteDataTable(string sql, CommandType commandtype, SqlParameter[] parameters)
{
DataTable data = new DataTable(); //实例化datatable,用于装载查询结果集
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.CommandType = commandtype;//设置command的commandType为指定的Commandtype
//如果同时传入了参数,则添加这些参数
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
//通过包含查询sql的sqlcommand实例来实例化sqldataadapter
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(data);//填充datatable
}
}
return data;
}
/// <summary>
/// 返回一个SqlDataReader对象的实例
/// </summary>
/// <param name="sql">要执行的SQl查询命令</param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql)
{
return ExecuteReader(sql, CommandType.Text, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="commandType">要执行查询语句的类型,如存储过程或者SQl文本命令</param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql,CommandType commandType)
{
return ExecuteReader(sql, commandType, null);
}
/// <summary>
/// 返回一个sqldatareader对象的实例
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, con);
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameters);
}
}
con.Open();
//CommandBehavior.CloseConnection参数指示关闭reader对象时关闭与其关联的Connection对象
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// 执行一个查询,返回结果集的首行首列。忽略其他行,其他列
/// </summary>
/// <param name="sql">要执行的SQl命令</param>
/// <returns></returns>
public Object ExecuteScalar(string sql)
{
return ExecuteScalar(sql, CommandType.Text, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType"></param>
/// <returns></returns>
public Object ExecuteScalar(string sql, CommandType commandType)
{
return ExecuteScalar(sql, commandType, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType">参数类型</param>
/// <param name="parameters"></param>
/// <returns></returns>
public Object ExecuteScalar(string sql,CommandType commandType, SqlParameter[] parameters)
{
Object result=null;
SqlConnection con=new SqlConnection(connectionString);
SqlCommand cmd=new SqlCommand(sql,con);
cmd.CommandType= commandType;
if(parameters!=null)
{
foreach (SqlParameter parapmeter in parameters)
{
cmd.Parameters.Add(parapmeter);
}
}
con.Open();
result=cmd.ExecuteScalar();
con.Close();
return result;
}
/// <summary>
/// 对数据库进行增删改的操作
/// </summary>
/// <param name="sql">要执行的sql命令</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql)
{
return ExecuteNonQuery(sql, CommandType.Text, null);
}
/// <summary>
/// 数据库进行增删改的操作
/// </summary>
/// <param name="sql">对数据库进行操作的sql命令</param>
/// <param name="commandType">要执行查询语句的类型,如存储过程或者sql文本命令</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType)
{
return ExecuteNonQuery(sql, commandType, null);
}
/// <summary>
/// 对数据库进行增删改的操作
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="commandType">要执行的查询语句类型,如存储过程或者sql文本命令</param>
/// <param name="parameters">Transact-SQL语句或者存储过程的参数数组</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
{
int count = 0;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = commandType;
if (parameters != null)
{
foreach(SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
con.Open();
count = cmd.ExecuteNonQuery();
con.Close();
return count;
}
/// <summary>
/// 返回当前连接的数据库中所有用户创建的数据库
/// </summary>
/// <returns></returns>
public DataTable GetTables()
{
DataTable table = null;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
table = con.GetSchema("Tables");
}
return table;
}
}
如果我们建立了一个对数据库访问的通用类以后,在随数据库进行操作的时候吗,就只需要先实例化对象,然后根据自己的需要,调用相应的方法就可以完成对数据库的所有操作。这就是数据库访问层和业务逻辑层分开的好处。
这样书写的代码,可以大大的减少我们代码的复杂度,而且,繁琐度也大大的降低了。


猜你喜欢
- PyMySQLPyMySQL概述PyMySQL是一个用于Python编程语言的纯Python MySQL客户端库,它实现了MySQL数据库协
- 介绍pandas数据聚合和重组的相关知识,仅供参考。1GroupBy技术1.1简介简介:根据一个或多个键进行分组,每一组应用函数,再进行合并
- <script type="text/javascript"> function MathRand() {
- 要知道我们程序猿也是需要浪漫的,小博我之前在网上搜寻了很多代码,确发现好多都不是最新的,所以自己就整理了一下代码,现在与广大博友们分享下我们
- 一、简介Python 内置了 requests 模块,该模块主要用来发送 HTTP 请求,requests 模块比 urllib
- 前言最近在学习vue框架的基本原理,看了一些技术博客以及一些对vue源码的简单实现,对数据代理、数据劫持、模板解析、变异数组方法、双向绑定有
- 本文主要介绍了OpenCV全景图像拼接的实现示例,分享给大家,具体如下:left_01.jpgright_01.jpgStitcher.py
- 一个图形化的交互式运行环境,对于编程语言的学习和开发,特别是可视化方面,提供了极大的便利。比如在window上使用R语言进行绘图,在R语言自
- python3的编码问题。打开python开发工具IDLE,新建‘codetest.py'文件,并写代码如下:import sysp
- 在线音乐播放器,使用python的Tkinter库做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过ur
- 1、引言在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtra
- 数组去重ES6提供了几种简洁的数组去重的方法,但该方法并不适合处理非基本类型的数组。对于基本类型的数组去重,可以使用... new Set(
- 实例如下:# bytes object b = b"example" # str object s = "ex
- 密码算法程序设计实践选的SHA-1。在写的过程中遇到一丢丢关于python移位的问题,记录一下。SHA-1其中第一步需要填充消息。简单阐述一
- 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架。我这里并不想探
- Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。可以通过下图来简单了解条件语句的执行过
- 轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动
- 本文实例讲述了Smarty实现页面静态化(生成HTML)的方法。分享给大家供大家参考,具体如下:为了减少数据库读取次数,某些内容不经常被更改
- 晚上打开MAC,发现root帐户突然不能正常登陆MySQL,于是打算重置密码,看了几篇文章,竟然重置不成功,总是得到Unknown colu
- 在scipy.linalg的函数中,往往会提供两种参数,其一是check_finite,当为True时将进行有限检查,另一类是overwri