DBHelper

摘要:
//连接字符串在界面层的webConfig的配置文件中。[设计为public是为了创建带事务的连接,因为连接将在DAL相关类中创建]publicstaticstringConnectionString="DataSource=.;InitialCatalog=PB_BookShopDemo;IntegratedSecurity=True";#region执行SQL语句或存储过程,返回影响的行数//////执行SQL语句或存储过程,返回影响的行数//////命令类型///存储过程名称或者sql命令语句///执行命令所用参数的集合///执行命令所影响的行数publicstaticintExecuteNonQuery{SqlCommandcommand=newSqlCommand();using{//为什么要调用准备执行命令这个方法:因为在此处可以加入一个事务控制。
 /// <summary>
    ///SqlHelper类是专门提供给用于高性能、可升级的sql数据操作
    /// </summary>
    public static classDBHelper
    {
        //数据库连接字符串。
        //连接字符串在界面层的webConfig的配置文件中。[设计为public是为了创建带事务的连接,因为连接将在DAL相关类中创建]
        public static string ConnectionString = "Data Source=.;Initial Catalog=PB_BookShopDemo;Integrated Security=True";

        #region 执行SQL语句或存储过程,返回影响的行数
        /// <summary>
        ///执行SQL语句或存储过程,返回影响的行数
        /// </summary>
        /// <param name="commandType">命令类型(存储过程, 文本, 表或视图)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="paras">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(CommandType commandType, string commandText, paramsSqlParameter[] paras)
        {
            SqlCommand command = newSqlCommand();
            using (SqlConnection connection = newSqlConnection(ConnectionString))
            {
                //为什么要调用准备执行命令这个方法:因为在此处可以加入一个事务控制。
                PrepareCommand(command, connection, null, commandType, commandText, paras);
                int val =command.ExecuteNonQuery();
                command.Parameters.Clear();
                returnval;
            }
        }
        #endregion

        #region 执行一个返回读取器的sql命令
        /// <summary>
        ///用执行的数据库连接执行一个返回读取器的sql命令
        /// </summary>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="paras">执行命令所用参数的集合</param>
        /// <returns>包含结果的读取器</returns>
        public static SqlDataReader ExecuteGetReader(CommandType commandType, string commandText, paramsSqlParameter[] paras)
        {
            //创建一个SqlCommand对象
            SqlCommand command = newSqlCommand();
            //创建一个SqlConnection对象
            SqlConnection connection = newSqlConnection(ConnectionString);

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

        #region 执行一个命令并返回第一列
        /// <summary>
        ///用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
        /// </summary>
        ///<param name="ConnectionString">一个有效的连接字符串</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="paras">执行命令所用参数的集合</param>
        /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
        public static object ExecuteScalar(CommandType commandType, string commandText, paramsSqlParameter[] paras)
        {
            SqlCommand command = newSqlCommand();

            using (SqlConnection connection = newSqlConnection(ConnectionString))
            {
                PrepareCommand(command, connection, null, commandType, commandText, paras);
                object val =command.ExecuteScalar();
                command.Parameters.Clear();
                returnval;
            }
        }
        #endregion

        #region 使用现有的SQL事务执行一个sql命令,返回影响的行数
        /// <summary>
        ///使用现有的SQL事务执行一个sql命令
        /// </summary>
        /// <param name="transaction">一个现有的事务</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="paras">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] paras)
        {
            //这里不能关闭连接,因为事务还没有完成,此连接将一直为本次事务提供服务。
            //连接将在相关的DAL数据模块中创建,然后传入本方法,所以本类的连接字符串要为Public
            SqlCommand command = newSqlCommand();
            PrepareCommand(command, connection, transaction, commandType, commandText, paras);
            int val =command.ExecuteNonQuery();
            command.Parameters.Clear();
            returnval;
        }
        #endregion

        #region 准备执行一个命令
        /// <summary>
        ///准备执行一个命令
        /// </summary>
        /// <param name="cmd">sql命令</param>
        /// <param name="conn">Sql连接</param>
        /// <param name="trans">Sql事务</param>
        /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
        /// <param name="cmdText">命令文本</param>
        /// <param name="cmdParms">执行命令的参数</param>
        private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, stringcommandText, SqlParameter[] paras)
        {
            if (connection.State !=ConnectionState.Open)
            {
                connection.Close();
                connection.Open();
            }

            command.Connection =connection;
            command.CommandText =commandText;

            if (transaction != null)
                command.Transaction =transaction;

            command.CommandType =commandType;
            command.Parameters.Clear();

            if (paras != null)
                command.Parameters.AddRange(paras);
        }
        #endregion             
                
        #region 使用现有的SQL事务执行一个sql命令,返回第一列
        /// <summary>
        ///使用现有的SQL事务执行一个sql命令
        /// </summary>
        /// <param name="transaction">一个现有的事务</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="paras">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static object ExecuteScalar(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] paras)
        {
            //这里不能关闭连接,因为事务还没有完成,此连接将一直为本次事务提供服务。
            //连接将在相关的DAL数据模块中创建,然后传入本方法,所以本类的连接字符串要为Public
            SqlCommand command = newSqlCommand();
            PrepareCommand(command, connection, transaction, commandType, commandText, paras);
            object val =command.ExecuteScalar();
            command.Parameters.Clear();
            returnval;
        }
        #endregion
    }

免责声明:文章转载自《DBHelper》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安装完SAP后BASIS的配置流程关于开源的RTP——jrtplib的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

操作笔记:linux下安装mysql

1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev mysql-connector-odbc-5.2.5-6.el7.x86_64) [root@iZ945sgm0ugZ ~]# rpm -qa|grep -...

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-...

Sql Server 优化的方法

<!--StartFragment-->查询速度慢的原因很多,常见如下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查...

MySQL性能优化总结

一、MySQL的主要适用场景 1、Web网站系统 2、日志记录系统 3、数据仓库系统 4、嵌入式系统 二、MySQL架构图: 三、MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件。首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI...

pg vacuum的弊与利 之弊

即便是从数据库特性,SQL功能性等方面,PostgreSQL都是一个更接近Oracle,在这方面远胜于MySQL的数据库,但是这个来源是学校的教学数据库的开源数据库,在很多地方,设计实现上的考虑,从我目前来看,是不完备的,其中的典型代表,就是vacuum机制. 如果是一直搞别的数据库的人,无论是MySQL还是Oracle的DBA,看PostgreSQL总感...

转:sqlplus使用总结

为什么我要使用sqlplus: SQLPLUS很多人用的并不多,在我观察周围来看,很多人都在使用PLSQL DEVELOPER,尤其是开发人员,更是如此,那学习SQLPLUS有啥好处呢?在我看来有如下三点1、当我们要在UNIX平台用SHELL访问数据库(如:做一些后台操作,定时任务等等),这个时候SQLPLUS是唯一选择。2、SQLPLUS 是ORACLE...