ADO.NET帮助类DBHelper
一. DBHelper帮助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
/// <summary>
/// 数据库操作帮助类
/// </summary>
public class DBHelper
{
//连接字符串,从web.config中获取
public static string conStr = ConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString;
/// <summary>
/// 获取SqlCommand对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="conn">数据库连接对象</param>
/// <param name="pars">参数集</param>
/// <returns>SqlCommand对象</returns>
private static SqlCommand GetSqlCommand(string sql, SqlConnection conn, params SqlParameter[] pars)
{
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
comm.Parameters.AddRange(pars);
return comm;
}
/// <summary>
/// 设置SqlCommand对象的值
/// </summary>
/// <param name="comm">SqlCommand对象</param>
/// <param name="commandText">需要执行的sql语句或存储过程名称</param>
/// <param name="conn">数据库连接对象</param>
/// <param name="type">执行的类型(sql语句类型或存储过程类型)</param>
private static void SetSqlCommand(SqlCommand comm, string commandText, SqlConnection conn, CommandType type)
{
comm.CommandText = commandText;
comm.Connection = conn;
comm.CommandType = type;
}
/// 查询返回SqlDataReader,读取数据完毕后必须关闭SqlDataReader,会自动释放数据库连接
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="pars">参数集</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pars)
{
SqlConnection conn = new SqlConnection(conStr);
SqlCommand comm = GetSqlCommand(sql, conn, pars);
return comm.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// 执行查询,返回结果集的第一行第一列数据
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="pars">参数集</param>
/// <returns>单个数据</returns>
public static object ExecuteScalar(string sql, params SqlParameter[] pars)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
SqlCommand comm = GetSqlCommand(sql, conn, pars);
return comm.ExecuteScalar();
}
}
/// <summary>
/// 执行增删改操作
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="pars">参数集</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pars)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
SqlCommand comm = GetSqlCommand(sql, conn, pars);
return comm.ExecuteNonQuery();
}
}
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="pars">参数集</param>
/// <returns>DataTable</returns>
public static DataTable ExecuteAdapter(string sql, params SqlParameter[] pars)
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(conStr))
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
adapter.SelectCommand.Parameters.AddRange(pars);
adapter.Fill(dt);
}
return dt;
}
/// 调用存储过程返回SqlDataReader,读取数据完毕后必须关闭SqlDataReader,会自动释放数据库连接
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="comm">Sqlcommand对象</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string procedureName, SqlCommand comm)
{
SqlConnection conn = new SqlConnection(conStr);
SetSqlCommand(comm, procedureName, conn, CommandType.StoredProcedure);
return comm.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// 调用存储过程,返回结果集的第一行第一列数据
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="comm">Sqlcommand对象</param>
/// <returns>单个数据</returns>
public static object ExecuteScalar(string procedureName, SqlCommand comm)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
SetSqlCommand(comm, procedureName, conn, CommandType.StoredProcedure);
return comm.ExecuteScalar();
}
}
/// <summary>
/// 调用存储过程,执行非查询操作(增删改)
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="comm">Sqlcommand对象</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string procedureName, SqlCommand comm)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
SetSqlCommand(comm, procedureName, conn, CommandType.StoredProcedure);
return comm.ExecuteNonQuery();
}
}
/// <summary>
/// 执行存储过程,返回DataTable
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="comm">Sqlcommand对象</param>
/// <returns>DataTable</returns>
public static DataTable ExecuteAdapter(string procedureName, SqlCommand comm)
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(conStr))
{
SetSqlCommand(comm, procedureName, conn, CommandType.StoredProcedure);
SqlDataAdapter adapter = new SqlDataAdapter(comm);
adapter.Fill(dt);
}
return dt;
}
/// <summary>
/// 使用事务执行多个非查询操作,sql语句不能相同
/// </summary>
/// <param name="sqlList">键:sql语句 值:参数集</param>
/// <returns>是否全都成功执行</returns>
public static bool ExecuteWithTransaction(Dictionary<string, List<SqlParameter>> sqlList)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.Transaction = tran;
try
{
foreach (var v in sqlList)
{
comm.Parameters.Clear();
comm.CommandText = v.Key;
if (v.Value != null && v.Value.Count > )
{
comm.Parameters.AddRange(v.Value.ToArray());
}
comm.ExecuteNonQuery();
}
tran.Commit();
return true;
}
catch (Exception)
{
tran.Rollback();
return false;
}
}
}
/// <summary>
/// 使用事务执行多个非查询操作,通用
/// </summary>
/// <param name="sqlList">SQL对象</param>
/// <returns>是否全都成功执行</returns>
public static bool ExecuteWithTransaction(List<SQL> sqlList)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.Transaction = tran;
try
{
foreach (var v in sqlList)
{
comm.Parameters.Clear();
comm.CommandText = v.Sql;
if (v.ParameterList != null && v.ParameterList.Count > )
{
comm.Parameters.AddRange(v.ParameterList.ToArray());
}
comm.ExecuteNonQuery();
}
tran.Commit();
return true;
}
catch (Exception)
{
tran.Rollback();
return false;
}
}
}
}
/// <summary>
/// SQL类,包含sql语句和参数集
/// </summary>
public class SQL
{
public string Sql { get; set; }
public List<SqlParameter> ParameterList { get; set; }
public SQL(string sql, List<SqlParameter> pars)
{
this.Sql = sql;
this.ParameterList = pars;
}
public SQL(string sql)
{
this.Sql = sql;
}
public SQL()
{
}
}
}
二.例子
存储过程
alter proc p_getByGender
@Gender char()=,
@Count int output
as
declare @CountSql nvarchar()
set @CountSql='select @Count=count(1) from Student'
exec sp_executesql @CountSql,N'@Count int output',@Count output
declare @Sql nvarchar()
set @Sql='select * from Student where Gender = '+CHAR()+@Gender+CHAR()
print @Gender
print @Sql
exec(@Sql)
go
ADO.net调用
//创建SqlCommand对象
SqlCommand comm = new SqlCommand();
//设置存储过程的参数
comm.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output;
comm.Parameters.Add("@Gender", SqlDbType.Char, ).Value = ;
//调用DBHelper的方法返回结果
DataTable dt=DBHelper.ExecuteAdapter("p_getByGender", comm);
//储存过程的输出参数
int count = (int)comm.Parameters["@Count"].Value;
ADO.NET帮助类DBHelper的更多相关文章
- ADO.NET sqlHelper类(DBHelper类)
1.配置文件 <connectionStrings> <add name="constr" connectionString="Data Source= ...
- 我也来写:数据库访问类DBHelper
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...
- 我也来写:数据库访问类DBHelper(转)
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...
- C#.NET数据库访问类DBHelper
这是一个与C# .NET通用的数据库访问类,包含了工厂模式.事务处理等安全机制. 调用方式: DBHelper db = new DBHelper(); DbCommand cmd = db.GetS ...
- 通用数据库帮助类DBHelper(含log日志信息实时记录)
项目需要,需要一个通用的数据库操作类,增删改查.事务.存储过程.日志记录都要有,于是在已有的帮助类上做了一些改进,并将log4j的.NET版--log4net嵌入其中记录sql的执行环境和状态. 用起 ...
- 数据帮助类DBhelper的定义
数据库帮助类的使用DBhelperusing System;using System.Collections.Generic;using System.Text;using System.Data;u ...
- 数据库助手类 DBHelper
using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ...
- ado.net 实体类_数据访问类
实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- ADO.NET 实体类和数据访问类
SQL数据库字符串注入攻击:需要使用cmd.Parameters这个集合占位符: @key 代表这个位置用这个占位符占住了 Parameters这个集合中将此占位符所代表的数据补全 cmd.Param ...
随机推荐
- 在Python3.5下安装和测试Scrapy爬网站
1. 引言 Scrapy框架结构清晰,基于twisted的异步架构可以充分利用计算机资源,是爬虫做大的必备基础.本文将讲解如何快速安装此框架并使用起来. 2. 安装Twisted 2.1 同安装Lxm ...
- X-factor Chains(POJ3421 素数)
X-factor Chains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6212 Accepted: 1928 D ...
- [TYVJ] P1010 笨小猴
笨小猴 背景 Background NOIP2008复赛提高组第一题 描述 Description 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种 ...
- android Unable to resolve target 'android-XX'错误和conversion to dalvik format failed with error 1错误
当用eclipse 导入一个已经存在的项目时,经常会遇见:Unable to resolve target 'android-XX' 类似的错误.这是因为导入的项目代码中project.propert ...
- LeetCode_Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- JavaEE Tutorials (29) - Duke辅导案例研究示例
29.1Duke辅导应用的设计和架构44529.2主界面447 29.2.1主界面中使用的Java持久化API实体447 29.2.2主界面中使用的企业bean448 29.2.3主界面中使用的Web ...
- UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>
L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others) Memory Limit: 43000/43000KB (Java/ ...
- Windows多线程同步系列之一-----互斥对象
多线程同步之互斥对象 作者:vpoet mail:vpoet_sir@163.com 对卖票问题进行线程间同步,本文将在上文的基础上,使用互斥对象对线程进行同步. 首先看看windows API ...
- ajax+json+java
1.首先下载json所以依赖的包, Json-lib 最新版 json-lib-2.3-jdk15.jar,其官方网站是:http://json-lib.sourceforge.net/可以直接dow ...
- convention-plugin
1.官方介绍的地址: http://struts.apache.org/2.1.6/docs/convention-plugin.html 2.struts.xml文件配置 只挑选几个重要的常量说明: ...