一. 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. 容器的深入研究(二)—Set与Map

    一.Set类的作用 二.Set类延生的四种形式 三.非基础类型如何使用Set的四种形式 四.Queue的使用 五.PriorityQueue的使用 六.Map的六种形式 七.HashMap散列码的实现 ...

  2. Django学习(五) 定义视图以及页面模板

    请求解析一般都是通过请求的request获取一定参数,然后根据参数做一定业务逻辑判断,这其中可能包括查询数据库,然后将需要返回的数据封装成一个HttpResponse返回. 代码如下: 这是一个简单的 ...

  3. CodeForces 25E Test KMP

    Description Sometimes it is hard to prepare tests for programming problems. Now Bob is preparing tes ...

  4. 雅思创始人Keith Taylor谈英语学习

    雅思创始人Keith Taylor谈英语学习 “要学的是信息,而不是语言” 我们要学习一个国家的语言就得知道这个国家的方方面面.要学习英语就得了解英美国家的社会.经济.人文.历史等各方面的信息. 大家 ...

  5. 启动Activity,传递参数最佳实践

    优化后的好处不言而喻,OtherActivity中所需要的参数都在方法参数中体现,减少了交流询问的成本. (1)MainActivity.java OtherActivity.openActivity ...

  6. 使用Qt编写服务器端程序(包括Http传输服务器端)的方法

    使用Qt编写客户端的程序的示例或demo较多,但是编写服务器端程序的demo很少.当然,服务器端的程序一般不需要带界面,这点我们可以理解.不过有些时候我们还是需要使用Qt编写一个简单的测试用的服务器代 ...

  7. Pascal's Triangle 解答

    Question Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows  ...

  8. 剑指offer-面试题21.包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...

  9. python多线程简单例子

    python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...

  10. 上传form表单

    <form name="theForm" method="post" action="index.php?m=back&c=Goods& ...