最新的SqlHelper 类

摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Collections; namespace SystemDAO
{
    /// <summary>
    /// 数据库的通用访问代码 苏飞修改
    /// 
    /// 此类为抽象类,
    /// 不允许实例化,在应用时直接调用即可
    /// </summary>
    public abstract class SqlHelper
    {
        /// <summary>
        /// 数据库连接字符串
        /// </summary>         public static readonly string connectionString = System.Configuration.ConfigurationSettings.AppSettings["con"].ToString().Trim();
        // Hashtable to store cached parameters
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());         #region//ExecteNonQuery方法         /// <summary>
        ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
        /// 使用参数数组形式提供参数列表 
        /// </summary>
        /// <param name="connectionString">一个有效的数据库连接字符串</param>
        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
        /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
        public static int ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                //清空SqlCommand中的参数列表
                cmd.Parameters.Clear();
                return val;
            }
        }         /// <summary>
        ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
        /// 使用参数数组形式提供参数列表 
        /// </summary>
        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
        /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
        public static int ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            return ExecteNonQuery(connectionString ,cmdType, cmdText, commandParameters);        }        /// <summary>        ///存储过程专用        /// </summary>        /// <param name="cmdText">存储过程的名字</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>        public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)        {            return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);        }        /// <summary>        ///Sql语句专用        /// </summary>        /// <param name="cmdText">T_Sql语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>        public static int ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters)        {            return ExecteNonQuery(CommandType.Text, cmdText, commandParameters);        }        #endregion        #region//GetTable方法        /// <summary>        /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接        /// 使用参数数组提供参数        /// </summary>        /// <param name="connecttionString">一个现有的数据库连接</param>        /// <param name="cmdTye">SqlCommand命令类型</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>        public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)        {            SqlCommand cmd = new SqlCommand();            DataSet ds = new DataSet();            using (SqlConnection conn = new SqlConnection(connecttionString))            {                PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);                SqlDataAdapter adapter = new SqlDataAdapter();                adapter.SelectCommand = cmd;                adapter.Fill(ds);            }            DataTableCollection table = ds.Tables;            return table;        }        /// <summary>        /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接        /// 使用参数数组提供参数        /// </summary>        /// <param name="cmdTye">SqlCommand命令类型</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>        public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)        {            return GetTable(cmdTye, cmdText, commandParameters);        }        /// <summary>        /// 存储过程专用        /// </summary>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>        public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters)        {            return GetTable(CommandType.StoredProcedure, cmdText, commandParameters);        }        /// <summary>        /// Sql语句专用        /// </summary>        /// <param name="cmdText"> T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>        public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters)        {            return GetTable(CommandType.Text, cmdText, commandParameters);        }        #endregion        /// <summary>        /// 为执行命令准备参数        /// </summary>        /// <param name="cmd">SqlCommand 命令</param>        /// <param name="conn">已经存在的数据库连接</param>        /// <param name="trans">数据库事物处理</param>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param>        /// <param name="cmdParms">返回带参数的命令</param>        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)        {            //判断数据库连接状态            if (conn.State != ConnectionState.Open)                conn.Open();            cmd.Connection = conn;            cmd.CommandText = cmdText;            //判断是否需要事物处理            if (trans != null)                cmd.Transaction = trans;            cmd.CommandType = cmdType;            if (cmdParms != null)            {                foreach (SqlParameter parm in cmdParms)                    cmd.Parameters.Add(parm);            }        }        /// <summary>        /// Execute a SqlCommand that returns a resultset against the database specified in the connection string         /// using the provided parameters.        /// </summary>        /// <param name="connectionString">一个有效的数据库连接字符串</param>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>A SqlDataReader containing the results</returns>        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlCommand cmd = new SqlCommand();            SqlConnection conn = new SqlConnection(connectionString);            // we use a try/catch here because if the method throws an exception we want to             // close the connection throw code, because no datareader will exist, hence the             // commandBehaviour.CloseConnection will not work            try            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);                cmd.Parameters.Clear();                return rdr;            }            catch            {                conn.Close();                throw;            }        }        #region//ExecuteDataSet方法        /// <summary>        /// return a dataset        /// </summary>        /// <param name="connectionString">一个有效的数据库连接字符串</param>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>return a dataset</returns>        public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlConnection conn = new SqlConnection(connectionString);            SqlCommand cmd = new SqlCommand();            try            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);                SqlDataAdapter da = new SqlDataAdapter();                DataSet ds = new DataSet();                da.SelectCommand = cmd;                da.Fill(ds);                return ds;            }            catch            {                conn.Close();                throw;            }        }        /// <summary>        /// 返回一个DataSet        /// </summary>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>return a dataset</returns>        public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);        }        /// <summary>        /// 返回一个DataSet        /// </summary>        /// <param name="cmdText">存储过程的名字</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>return a dataset</returns>        public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);        }        /// <summary>        /// 返回一个DataSet        /// </summary>        /// <param name="cmdText">T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>return a dataset</returns>        public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);        }        public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlConnection conn = new SqlConnection(connectionString);            SqlCommand cmd = new SqlCommand();            try            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);                SqlDataAdapter da = new SqlDataAdapter();                DataSet ds = new DataSet();                da.SelectCommand = cmd;                da.Fill(ds);                DataView dv = ds.Tables[0].DefaultView;                dv.Sort = sortExpression + " " + direction;                return dv;            }            catch            {                conn.Close();                throw;            }        }        #endregion        #region // ExecuteScalar方法        /// <summary>        /// 返回第一行的第一列        /// </summary>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个对象</returns>        public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);        }        /// <summary>        /// 返回第一行的第一列存储过程专用        /// </summary>        /// <param name="cmdText">存储过程的名字</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个对象</returns>        public static object ExecuteScalarProducts(string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters);        }        /// <summary>        /// 返回第一行的第一列Sql语句专用        /// </summary>        /// <param name="cmdText">者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>返回一个对象</returns>        public static object ExecuteScalarText(string cmdText, params SqlParameter[] commandParameters)        {            return ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters);        }        /// <summary>        /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string         /// using the provided parameters.        /// </summary>        /// <remarks>        /// e.g.:          ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));        /// </remarks>        /// <param name="connectionString">一个有效的数据库连接字符串</param>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>        public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlCommand cmd = new SqlCommand();            using (SqlConnection connection = new SqlConnection(connectionString))            {                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);                object val = cmd.ExecuteScalar();                cmd.Parameters.Clear();                return val;            }        }        /// <summary>        /// Execute a SqlCommand that returns the first column of the first record against an existing database connection         /// using the provided parameters.        /// </summary>        /// <remarks>        /// e.g.:          ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));        /// </remarks>        /// <param name="connectionString">一个有效的数据库连接字符串</param>        /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>        /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>        public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlCommand cmd = new SqlCommand();            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);            object val = cmd.ExecuteScalar();            cmd.Parameters.Clear();            return val;        }        #endregion        /// <summary>        /// add parameter array to the cache        /// </summary>        /// <param name="cacheKey">Key to the parameter cache</param>        /// <param name="cmdParms">an array of SqlParamters to be cached</param>        public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)        {            parmCache[cacheKey] = commandParameters;        }        /// <summary>        /// Retrieve cached parameters        /// </summary>        /// <param name="cacheKey">key used to lookup parameters</param>        /// <returns>Cached SqlParamters array</returns>        public static SqlParameter[] GetCachedParameters(string cacheKey)        {            SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];            if (cachedParms == null)                return null;            SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];            for (int i = 0, j = cachedParms.Length; i < j; i++)                clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();            return clonedParms;        }        /// <summary>        /// 检查是否存在        /// </summary>        /// <param name="strSql">Sql语句</param>        /// <returns>bool结果</returns>        public static bool Exists(string strSql)        {            int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, null));            if (cmdresult == 0)            {                return false;            }            else            {                return true;            }        }        /// <summary>        /// 检查是否存在        /// </summary>        /// <param name="strSql">Sql语句</param>        /// <param name="cmdParms">参数</param>        /// <returns>bool结果</returns>        public static bool Exists(string strSql, params SqlParameter[] cmdParms)        {            int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));            if (cmdresult == 0)            {                return false;            }            else            {                return true;            }        }    }}

最新的SqlHelper 类的更多相关文章

  1. c#中sqlhelper类的编写(二)

    上一篇文章讲了简易版的SqlHelper类的编写,我们在这里就上一篇文章末尾提出的问题写出解决方案. sql语句注入攻击已经是众所周知的了.我们如何在C#中保护自己的数据库不被这样的方式攻击呢? 不用 ...

  2. JAVA WEB SQLHelper类的封装

    在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是 我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我 在我的模块就自己封装了 ...

  3. c#中sqlhelper类的编写(一)

    在.net平台的项目开发中,凡是用到数据库交互的,都有必要了解SqlHelper类的原理. 步骤一: 我就拿WPF项目开发作为例子.首先要新建一个App.config(应用程序配置文件).注意,在VS ...

  4. [置顶] 自己写sqlhelper类

    自己写sqlhelper类 using System; using System.Collections.Generic; using System.Configuration; using Syst ...

  5. ADO.NET复习——自己编写SqlHelper类

    今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...

  6. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...

  7. 微软官方SqlHelper类 数据库辅助操作类

    数据库操作类真的没有必要自己去写,因为成熟的类库真的非常完善了,拿来直接用就好,省时省力. 本文就为大家介绍微软官方的程序PetShop4.0中的SqlHelper类,先来做一下简单的介绍,PetSh ...

  8. 整理出一个比较实用的SqlHelper类 满足大多数情况的使用

    /// <summary> /// SqlHelper类 by zy 2016-3-11 /// </summary> public sealed class SqlHelpe ...

  9. C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法

    本文实例讲述了C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法.分享给大家供大家参考.具体如下: 这个类不是我实现的,英文原文地址为http://www.egg ...

随机推荐

  1. mssql中sp_executesql的用法

    上图:

  2. android 性能分析、优化

    .主要介绍了一些分析工具,比如GT.ITest等http://www.jianshu.com/p/8b77d394b2a6 .详细介绍啦android平台常见性能优化工具http://blog.csd ...

  3. adding validation annotators to model classes 在linq to EntityFrame的Model中添加前台验证validation annotators

    The same solution can be applied for LINQ to SQL. The snippet the article shows for using the Metada ...

  4. [原创]android自定义动画的一点感悟

    android提供了一系列的动画处理api,包括animator以及animation等.由于动画效果是根据人眼视觉残留原理形成的,因此动画过程中android需要不断频繁的更新view的相关属性,由 ...

  5. 99 Lisp Problems 二叉树(P54~P69)

    P54A (*) Check whether a given term represents a binary tree Write a predicate istree which returns ...

  6. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  7. 头文件 string.h cstring string 区别

    1.#include <cstring>   //不可以定义string s:可以用到strcpy等函数using   namespace   std; #include <stri ...

  8. 如何在终端实时展现git分支

    在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...

  9. IOS实现中间凸起圆形TabBar

    中间凸起的圆形TabBar曾经比较流行,类似于闲鱼之类的APP就使用了中间凸起TabBar,这两天自己动手实现了一个,效果图如下: 大致原理:重写UITabBar和UITabBarController ...

  10. LiveWriter Test

    From LiveWriter.