一. 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的更多相关文章

  1. ADO.NET sqlHelper类(DBHelper类)

    1.配置文件 <connectionStrings> <add name="constr" connectionString="Data Source= ...

  2. 我也来写:数据库访问类DBHelper

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  3. 我也来写:数据库访问类DBHelper(转)

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  4. C#.NET数据库访问类DBHelper

    这是一个与C# .NET通用的数据库访问类,包含了工厂模式.事务处理等安全机制. 调用方式: DBHelper db = new DBHelper(); DbCommand cmd = db.GetS ...

  5. 通用数据库帮助类DBHelper(含log日志信息实时记录)

    项目需要,需要一个通用的数据库操作类,增删改查.事务.存储过程.日志记录都要有,于是在已有的帮助类上做了一些改进,并将log4j的.NET版--log4net嵌入其中记录sql的执行环境和状态. 用起 ...

  6. 数据帮助类DBhelper的定义

    数据库帮助类的使用DBhelperusing System;using System.Collections.Generic;using System.Text;using System.Data;u ...

  7. 数据库助手类 DBHelper

    using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ...

  8. ado.net 实体类_数据访问类

    实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  9. ADO.NET 实体类和数据访问类

    SQL数据库字符串注入攻击:需要使用cmd.Parameters这个集合占位符: @key 代表这个位置用这个占位符占住了 Parameters这个集合中将此占位符所代表的数据补全 cmd.Param ...

随机推荐

  1. php sscanf() 函数使用

    定义和用法 sscanf() 函数根据指定的格式解析来自一个字符串的输入. 如果只向该函数传递两个参数,数据将以数组的形式返回.否则,如果传递了额外的参数,那么被解析的数据会存储在这些参数中.如果区分 ...

  2. 【python学习笔记01】python的数据类型

    python的基本数据类型 整型 int 浮点型 float 真值 bool 字符串 str 列表 list       #[1,2,3] 元组 tuple    #(1,2,3) 字典 dict   ...

  3. phalcon

    phalcon 代码内在sql 内用Ad去取数据库内的ad表. osx上没问题, centos报找不到表. 应该是centos上mysql区分大小写,可改写mysql的配置.

  4. git diff 使用

    1. 本地工作目录与远程仓库对比(所有改动过的文件) git diff HEAD  (HEAD指向最新一次的提交,即最新版本) 2. 之对比给定的文件 git diff -- filename //是 ...

  5. 51单片机实现对24C02进行页写、顺序读取并显示验证

    //************************************************************************************* //**程序名称:51单 ...

  6. vmware 网络连接

    解决VMware nat service等服务不能启动 虚拟机如何设置网络连接来上网?

  7. poj 3411 Paid Roads(dfs)

    Description A network of m roads connects N cities (numbered to N). There may be more than one road ...

  8. Unity 角色复活和重新开始游戏

    作者写游戏完成的时候,还需要从新想下如何把游戏设置重新开始,角色如何复活. 一般大多数都会采用这种方式来代替游戏重新开始 Application.LoadLevel("xxx场景" ...

  9. Android学习总结——SharedPreferences

    SharePreferences存储方式,只是轻量级数据存储,xml格式的数据显示方式.简单存储步骤如下:一:获取SharePreferences对象1.SharedPreferences pref ...

  10. react-native 环境配置及hello world

    一.前言 最近手头的工作繁多,有研究性的项目和系统研发,正好遇到同事离职,接手了框架的UI组件,不仅需要维护和填坑,还需要开发新的功能组件.因为身在H5-Hybird的框架部门,最近团队开始尝试使用R ...