using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

/// <summary>
    /// SqlHelper类是专门提供给广大用户用于高性能、可升级和最佳练习的sql数据操作
    /// </summary>
    public abstract class SqlHelper
    {

// 用于缓存参数的HASH表
        // public static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
        /// <summary>
        /// 返回一个数据表(Fill)1
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="cmdType">类型</param>
        /// <param name="cmdText">命令</param>
        /// <param name="TableName">DataTable表名</param>
        /// <returns>DataTable</returns>
        public static DataTable SelectTable(string connectionString, CommandType cmdType, string cmdText,string TableName)
        {

SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dpt = new SqlDataAdapter();
            using (SqlConnection Conn = new SqlConnection(connectionString))
            {
                cmd.CommandType = cmdType;
                cmd.CommandText = cmdText;
                dpt.SelectCommand = cmd;
                DataSet DsResoult = new DataSet();
                dpt.Fill(DsResoult, TableName);
                return DsResoult.Tables[TableName];
            }
        }
        /// <summary>
        /// 返回一个数据表(Fill)2
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="cmdType">类型</param>
        /// <param name="cmdText">命令</param>
        /// <returns>DataTable</returns>
        public static DataTable SelectTable(string connectionString, CommandType cmdType, string cmdText)
        {

SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dpt = new SqlDataAdapter();
            using (SqlConnection Conn = new SqlConnection(connectionString))
            {
                cmd.CommandType = cmdType;
                cmd.CommandText = cmdText;
                dpt.SelectCommand = cmd;
                DataSet DsResoult = new DataSet();
                dpt.Fill(DsResoult, "TempTable");
                return DsResoult.Tables["TempTable"];
            }
        }
           /// <summary>
        /// 返回一个数据表(Fill)3
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="cmdType">类型</param>
        /// <param name="cmdText">命令</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>DataTable</returns>
        public static DataTable SelectTable(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dpt = new SqlDataAdapter();
            using (SqlConnection Conn = new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, Conn, null, cmdType, cmdText, commandParameters);
                cmd.CommandType = cmdType;
                cmd.CommandText = cmdText;
                dpt.SelectCommand = cmd;
                DataSet DsResoult = new DataSet();
                dpt.Fill(DsResoult, "TableName");
                cmd.Parameters.Clear();
                return DsResoult.Tables["TableName"];
            }
        }
        /// <summary>
        /// 返回一个数据表(Fill)4
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="cmdType">类型</param>
        /// <param name="cmdText">命令</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>DataTable</returns>
        public static DataTable SelectTable(string connectionString, CommandType cmdType, string cmdText, string TableName, params SqlParameter[] commandParameters)
        {

SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dpt = new SqlDataAdapter();
            using (SqlConnection Conn = new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, Conn, null, cmdType, cmdText, commandParameters);
                cmd.CommandType = cmdType;
                cmd.CommandText = cmdText;
                dpt.SelectCommand = cmd;
                DataSet DsResoult = new DataSet();
                dpt.Fill(DsResoult, TableName);
                cmd.Parameters.Clear();
                return DsResoult.Tables[TableName];
            }
        }
        /// <summary>
        ///  给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
        /// </summary>
        /// <param name="connectionString">一个有效的连接字符串</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }

/// <summary>
        /// 用现有的数据库连接执行一个sql命令(不返回数据集)
        /// </summary>
        /// <param name="conn">一个现有的数据库连接</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

SqlCommand cmd = new SqlCommand();
   
            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

/// <summary>
        ///使用现有的SQL事务执行一个sql命令(不返回数据集)
        /// </summary>
        /// <remarks>
        ///举例: 
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="trans">一个现有的事务</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

/// <summary>
        /// 用执行的数据库连接执行一个返回数据集的sql命令
        /// </summary>
        /// <remarks>
        /// 举例: 
        ///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一个有效的连接字符串</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>包含结果的读取器</returns>
        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            //创建一个SqlCommand对象
            SqlCommand cmd = new SqlCommand();
            //创建一个SqlConnection对象
            SqlConnection conn = new SqlConnection(connectionString);

//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
            //因此commandBehaviour.CloseConnection 就不会执行
            try
            {
                //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                //调用 SqlCommand  的 ExecuteReader 方法
                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                //清除参数
                cmd.Parameters.Clear();
                return reader;
            }
            catch
            {
                //关闭连接,抛出异常
                conn.Close();
                throw;
            }
        }

/// <summary>
        /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
        /// </summary>
        /// <remarks>
        ///例如: 
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        ///<param name="connectionString">一个有效的连接字符串</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>用 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>
        /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
        /// </summary>
        /// <remarks>
        /// 例如: 
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="conn">一个存在的数据库连接</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>用 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;
        }

/// <summary>
        /// 准备执行一个命令
        /// </summary>
        /// <param name="cmd">sql命令</param>
        /// <param name="conn">Sql连接</param>
        /// <param name="trans">Sql事务</param>
        /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
        /// <param name="cmdText">命令文本,例如:Select * from Products</param>
        /// <param name="cmdParms">执行命令的参数</param>
        public 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);
            }
        }
    }

SqlHelper改造版本相关推荐

  1. hyperledger-cello-h3c改造版本支持多机多节点部署

    通过改造hyperledger-cello-h3c的GitHub原生代码,目前可以支持docker和k8s多机器多节点部署,同时实现节点动态部署服务器,order组织节点和peer组织节点分别部署到不 ...

  2. Porteus 2.0 RC1 发布,轻量级 Linux 版本

    Porteus是一份快捷的.便于携带的.模块化的自启动运行光盘及USB介质发行,它基于Slackware Linux.该发行始于一份Slax的社区改造版本(另一份基于Slackware的自启动光盘,但 ...

  3. Fabric CA国密版本的一种替代方案--使用cryptogen工具增加新用户

    在Fabric超级账本中,如果我们想动态增加用户发行证书,一般会使用Fabric CA或者其它CA.然而在国密改造场景中,当前缺乏可用的开源的Fabric CA国密版本.因此,笔者研究了一下,发现了一 ...

  4. ANDROID版本号和版本名称的重要性介绍

    转载请注明出处http://blog.csdn.net/y150481863/article/details/41249159,来自[http://blog.csdn.net/y150481863] ...

  5. xxl-job oracle 改造

    xxl-job oracle 改造 xxl-job 是一个分布式任务调度平台,目前官方只有mysql版本,本文针对2.2.0版本进行oracle 改造工作 改造版本已上传至GitHub: https: ...

  6. 第163天:js面向对象-对象创建方式总结

    面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. 1 var obj = {}; 2 //对象有自己的 属性 ...

  7. 旧电脑装什么系统最快_旧电脑装什么系统最好?试试Porteus,小巧强悍,直降CPU占用率!...

    前面的文章中给大家介绍了TinyCore和SliTaz这两款微型的Linux发行版,那么接着老毛桃将跟大家分享第三款:Porteus Linux. 简单介绍:Porteus 是一份快捷的.便于携带的. ...

  8. Java Review - 并发编程_原子操作类LongAdder LongAccumulator剖析

    文章目录 概述 小Demo 源码分析 重要的方法 long sum() reset sumThenReset longValue() add(long x) longAccumulate(long x ...

  9. 企业级Java开发树结构数据封装(开发必用)

    树结构数据封装 前言 一.树结构表模式 二.树结构案例 2.1 原生Java递归循环实现 2.1.1 创建实例对象 2.1.2 编写测试类 2.1.3 返回Json结果集 2.2 使用Jdk的Stre ...

最新文章

  1. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
  2. Silverlight 5 beta新特性探索系列:9.视频快进快退和TextSearch对象对文字项查询
  3. 汉仪尚巍手书可以商用吗_【商用车维修】夏天修空调可以撑起全年修车收入的一半,你会了吗?...
  4. Django REST framework 认证、权限和频率组件
  5. Java LinkedList addFirst()方法与示例
  6. 【数据结构】二叉树的python实现
  7. 惊呆了!JDK1.8竟然打破了我对接口的一切认知...
  8. 非因解读|Digital Spatial Profiler 新一代高维度空间组学技术
  9. matlab 2010无法运行程序,图文操作win7系统运行matlab2010找不到指定的程序的还原步骤...
  10. 致远项目管理SPM系统案例:中建二局项目管理系统
  11. 如何利用python监控主机存活并邮件、短信通知
  12. 有趣吧–中国最大的在线制作漫画社区 开站了
  13. CC00157.CloudKubernetes——|KuberNetes服务发布.V08|——|service.v04|验证service|
  14. linux查找文件命令有哪些
  15. Qt环境报错-Project ERROR: Cannot run compiler ‘cl‘. Output
  16. jmeter逻辑控制器之while循环控制器(一)
  17. java中文编程_Java中文编程开发
  18. 基于NIO的Client/Server程序实践
  19. TCP协议网络安全攻击
  20. 推动加密硬件性能改进的六项创新

热门文章

  1. linux虚拟机ip修改无效
  2. 滑动窗口在重构数据集的作用
  3. 《MySQL——加锁规则(待补全,有些没看懂)》
  4. java scanner_Java Scanner nextLong()方法与示例
  5. c ++ 函数的esp指针_在C ++中通过指针访问成员函数
  6. golang mysql curd_Go 语言操作 MySQL 之 CURD 操作
  7. java集合转换_java各种集合的转换
  8. shellcode---c和汇编混合编程---弹出cmd
  9. vm磁盘映射 不能启动_Oracle的启动与关闭-数据库(4)
  10. windows 下 安装mysql 出现 “ ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password