C# SqlServer的Helper基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;


namespace SqlServerDAL
{
    public class SqlHelper
    {
        static string _SqlConnectionString;
        public static string SqlConnectionString
        {
            get
            {
                return _SqlConnectionString;
            }
            set
            {
                _SqlConnectionString = value;
            }
        }


        /// <summary>
        /// 设置参数内容
        /// </summary>
        /// <param name="ParamName">名称</param>
        /// <param name="DbType">数据类型</param>
        /// <param name="Size">长度大小</param>
        /// <param name="paramevalue">值</param>
        /// <param name="direction">类型</param>
        /// <returns></returns>
        public static SqlParameter SetDataParameter(string ParamName, SqlDbType DbType, Int32 Size, object paramevalue, ParameterDirection Direction)
        {
            SqlParameter param = new SqlParameter();
            param.SqlDbType = DbType;
            param.ParameterName = ParamName;

            if (Size > 0)
            {
                param.Size = Size;
            }
            if (paramevalue.ToString() != "" && paramevalue != null && Direction != ParameterDirection.Output)
            {
                param.Value = paramevalue;
            }

            param.Direction = Direction;
            return param;
        }
        /// <summary>
        /// 设置参数内容
        /// </summary>
        /// <param name="ParamName">名称</param>
        /// <param name="DbType">数据类型</param>
        /// <param name="Direction">类型</param>
        /// <returns></returns>
        public static SqlParameter SetDataParameter(string ParamName, SqlDbType DbType, ParameterDirection Direction)
        {
            SqlParameter param = new SqlParameter();
            param.SqlDbType = DbType;
            param.ParameterName = ParamName;
            param.Direction = Direction;
            return param;
        }

        #region 私有方法
        /// <summary>
        /// 将SqlParameter参数数组(参数值)分配给DbCommand命令.
        /// 这个方法将给任何一个参数分配DBNull.Value;
        /// 该操作将阻止默认值的使用.
        /// </summary>
        /// <param name="command">命令名</param>
        /// <param name="commandParameters">SqlParameters数组</param>
        private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
        {
            if (command == null) throw new ArgumentNullException("command");
            if (commandParameters != null)
            {
                foreach (SqlParameter p in commandParameters)
                {
                    if (p != null)
                    {
                        // 检查未分配值的输出参数,将其分配以DBNull.Value.
                        if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) &&
                            (p.Value == null))
                        {
                            p.Value = DBNull.Value;
                        }
                        command.Parameters.Add(p);
                    }
                }
            }
            //应用完成后清除原所有参数值
            // ClearIDataParameter();
        }

        /// <summary>
        /// 预处理用户提供的命令,数据库连接/事务/命令类型/参数
        /// </summary>
        /// <param name="transaction">一个有效的事务或者是null值</param>
        /// <param name="commandType">命令类型 (存储过程,命令文本, 其它.)</param>
        /// <param name="commandText">存储过程名或都SQL命令文本</param>
        /// <param name="commandParameters">和命令相关联的SqlParameter参数数组,如果没有参数为'null'</param>
        /// <param name="mustCloseConnection"><c>true</c> 如果连接是打开的,则为true,其它情况下为false.</param>
        private static void PrepareCommand(SqlConnection Connection, SqlCommand Command, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, out bool mustCloseConnection)
        {
            try
            {
                if (Command == null) throw new ArgumentNullException("command");
                if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");

                if (Connection.State != ConnectionState.Open)
                {
                    mustCloseConnection = true;
                    Connection.Open();
                }
                else
                {
                    mustCloseConnection = false;
                }

                // 给命令分配一个数据库连接.
                Command.Connection = Connection;

                // 设置命令文本(存储过程名或SQL语句)
                Command.CommandText = commandText;

                // 分配事务
                if (transaction != null)
                {
                    if (transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
                    Command.Transaction = transaction;
                }

                // 设置命令类型.
                Command.CommandType = commandType;

                // 分配命令参数
                if (commandParameters != null)
                {
                    //SqlParameter[] dpitem = 
                    AttachParameters(Command, commandParameters);
                }
            }
            catch
            {
                mustCloseConnection = false;
            }
        }
        #endregion

        #region ExecuteDataSet 数据表
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(string commandText)
        {
            return ExecuteDataSet((SqlTransaction)null, commandText, CommandType.Text, (SqlParameter[])null);
        }
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <param name="commandtype">命令类型 (存储过程,命令文本或其它)</param>
        /// <param name="commandParameters">参数</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(SqlTransaction transaction, string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {

                connection.Open();
                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
                try
                {
                    SqlDataAdapter sdap = new SqlDataAdapter();
                    sdap.SelectCommand = Command;

                    DataSet ds = new DataSet();
                    sdap.Fill(ds);
                    Command.Parameters.Clear();//清空

                    Command.Dispose();
                    if (mustCloseConnection)
                        connection.Close();
                    return ds;
                }
                catch (Exception ex)
                {
                    Command.Parameters.Clear();//清空

                    Command.Dispose();
                    if (mustCloseConnection)
                        connection.Close();

                    return new DataSet();
                }
            }
        }
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <param name="commandTytpe">命令类型 (存储过程,命令文本或其它)</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(string commandText, CommandType commandTytpe)
        {
            return ExecuteDataSet((SqlTransaction)null, commandText, commandTytpe, (SqlParameter[])null);
        }
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="outParameters">输出输出参数结果集合,例:{Name,Value}</param>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
        /// <param name="commandParameters">参数</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(ref Hashtable outParameters, string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {

                connection.Open();

                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
                try
                {
                    SqlDataAdapter sdap = new SqlDataAdapter();
                    sdap.SelectCommand = Command;

                    DataSet ds = new DataSet();
                    sdap.Fill(ds);

                    if (outParameters != null)
                    {
                        for (int i = 0; i < Command.Parameters.Count; i++)
                        {
                            if (Command.Parameters[i].Direction == ParameterDirection.Output)
                            {
                                if (!outParameters.Contains(Command.Parameters[i].ParameterName))
                                {
                                    outParameters.Add(Command.Parameters[i].ParameterName, Command.Parameters[i].Value.ToString());
                                }
                            }
                        }
                    }
                    Command.Parameters.Clear();//清空

                    Command.Dispose();
                    if (mustCloseConnection)
                        connection.Close();
                    return ds;
                }
                catch (Exception ex)
                {
                    Command.Parameters.Clear();//清空

                    Command.Dispose();
                    if (mustCloseConnection)
                        connection.Close();

                    return new DataSet();
                }
            }
        }
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="outParameters">输出输出参数结果集合,例:{Name,Value}</param>
        /// <param name="SqlSPro">存储过程</param>
        /// <param name="commandParameters">参数</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(ref Hashtable outParameters, string SqlSPro, params SqlParameter[] commandParameters)
        {
            return ExecuteDataSet(ref outParameters, SqlSPro, CommandType.StoredProcedure, commandParameters);
        }
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet.
        /// </summary>
        /// <param name="outParameters">输出输出参数结果集合,例:{Name,Value}</param>
        /// <param name="SqlSPro">存储过程</param>
        /// <param name="commandParameters">参数</param>
        /// <returns>返回一个包含结果集的DataSet</returns>
        public static DataSet ExecuteDataSet(string SqlSPro, params SqlParameter[] commandParameters)
        {
            Hashtable outParameters = null;
            return ExecuteDataSet(ref outParameters, SqlSPro, CommandType.StoredProcedure, commandParameters);
        }
        #endregion

        #region ExecuteScalar 返回结果集中的第一行第一列

        /// <summary>
        /// 返回一条数据
        /// </summary>
        /// <param name="transaction"></param>
        /// <param name="commandType"></param>
        /// <param name="commandText"></param>
        /// <param name="commandParameters"></param>
        /// <returns></returns>
        public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {

                connection.Open();
                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                try
                {
                    PrepareCommand(connection, Command, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
                    object rvalue = Command.ExecuteScalar();
                    Command.Parameters.Clear();//清空
                    Command.Dispose();
                    if (mustCloseConnection)
                        connection.Close();
                    return rvalue;
                }
                catch (Exception ex)
                {
                    Command.Parameters.Clear();//清空
                    if (mustCloseConnection)
                        connection.Close();

                    return null;
                }

            }
        }
        /// <summary>
        /// 返回一条数据
        /// </summary>
        /// <param name="commandType"></param>
        /// <param name="commandText"></param>
        /// <returns></returns>
        public static object ExecuteScalar(CommandType commandType, string commandText)
        {
            return ExecuteScalar((SqlTransaction)null, commandType, commandText, (SqlParameter[])null);
        }
        /// <summary>
        /// 返回一条数据
        /// </summary>
        /// <param name="commandType"></param>
        /// <param name="commandText"></param>
        /// <returns></returns>
        public static object ExecuteScalar(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            return ExecuteScalar((SqlTransaction)null, commandType, commandText, commandParameters);
        }
        /// <summary>
        /// 返回一条数据
        /// </summary>
        /// <param name="commandType"></param>
        /// <param name="commandText"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public static object ExecuteScalar(CommandType commandType, string commandText, SqlTransaction transaction)
        {
            return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);
        }
        /// <summary>
        /// 返回一第数据
        /// </summary>
        /// <param name="commandText"></param>
        /// <returns></returns>
        public static object ExecuteScalar(string commandText)
        {
            return ExecuteScalar(CommandType.Text, commandText, (SqlTransaction)null);
        }
        #endregion

        #region ExecuteDataReader 数据阅读器

        public static DbDataReader ExecuteDataReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            if (connection == null) throw new ArgumentNullException("connection");
            DbDataReader reader = null;
            bool mustCloseConnection = false;
            SqlCommand Command = new SqlCommand();
            try
            {
                PrepareCommand(connection, Command, transaction, commandType, commandText, commandParameters, out mustCloseConnection);

                reader = Command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

                //reader = Command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

                Command.Parameters.Clear();//清空
                //Command.Dispose();
            }
            catch (Exception ex)
            {

            }
            return reader;
        }
        public static DbDataReader ExecuteDataReader(SqlTransaction transaction, CommandType commandType, string commandText)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(SqlConnectionString);

                connection.Open();
                return ExecuteDataReader(connection, transaction, commandType, commandText, (SqlParameter[])null);
            }
            catch
            {
                // If we fail to return the SqlDatReader, we need to close the connection ourselves
                if (connection != null) connection.Close();
                throw;
            }
        }
        public static DbDataReader ExecuteDataReader(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(SqlConnectionString);

                connection.Open();
                return ExecuteDataReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters);
            }
            catch
            {
                // If we fail to return the SqlDatReader, we need to close the connection ourselves
                if (connection != null) connection.Close();
                throw;
            }
        }
        public static DbDataReader ExecuteDataReader(CommandType commandType, string commandText)
        {
            return ExecuteDataReader(commandType, commandText, (SqlParameter[])null);
        }
        public static DbDataReader ExecuteDataReader(string commandText)
        {
            return ExecuteDataReader(CommandType.Text, commandText);
        }
        public static DbDataReader ExecuteDataReader(SqlConnection connection, out List<string[]> outParameters, string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            DbDataReader reader = null;
            outParameters = new List<string[]>();
            try
            {
                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);

                reader = Command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);// (CommandBehavior.CloseConnection);
                Command.Parameters.Clear();//清空
                Command.Dispose();

            }
            catch (Exception ex)
            {
            }
            return reader;
        }
        public static DbDataReader ExecuteDataReader(out List<string[]> outParameters, string SqlSPro, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(SqlConnectionString);

                connection.Open();
                return ExecuteDataReader(connection, out outParameters, SqlSPro, CommandType.StoredProcedure, commandParameters);
            }
            catch
            {
                // If we fail to return the SqlDatReader, we need to close the connection ourselves
                if (connection != null) connection.Close();
                throw;
            }
        }
        #endregion

        #region ExecuteDataRow 返回结果集中第一行
        /// <summary>
        /// 执行指定数据库连接字符串的命令,返回DataSet第一行.
        /// </summary>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <param name="commandtype">命令类型 (存储过程,命令文本或其它)</param>
        /// <param name="commandParameters">参数</param>
        /// <returns>返回一个包含结果集的DataSet中的第一行</returns>
        public static DataRow ExecuteDataRow(SqlTransaction transaction, string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            try
            {
                DataRow row = null;
                DataSet ds = ExecuteDataSet(transaction, commandText, commandType, commandParameters);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    row = (DataRow)ds.Tables[0].Rows[0];
                }
                ds.Dispose();
                return row;
            }
            catch
            {
                return null;
            }
        }
        public static DataRow ExecuteDataRow(string commandText, CommandType commandType)
        {
            return ExecuteDataRow((SqlTransaction)null, commandText, commandType, (SqlParameter[])null);
        }
        public static DataRow ExecuteDataRow(string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            return ExecuteDataRow((SqlTransaction)null, commandText, commandType, commandParameters);
        }
        public static DataRow ExecuteDataRow(string commandText)
        {
            return ExecuteDataRow((SqlTransaction)null, commandText, CommandType.Text, (SqlParameter[])null);
        }
        #endregion

        #region ExecuteNonQuery方法
        public static int ExecuteNonQuery(ref Hashtable OutPut, string commandText, params SqlParameter[] commandParameters)
        {
            if (_SqlConnectionString == null || _SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(_SqlConnectionString))
            {
                connection.Open();
                // 创建DbCommand命令,并进行预处理

                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, CommandType.StoredProcedure, commandText, commandParameters, out mustCloseConnection);

                // 执行命令
                int retval = Command.ExecuteNonQuery();
                for (int i = 0; i < Command.Parameters.Count; i++)
                {
                    if (Command.Parameters[i].Direction == ParameterDirection.Output)
                    {
                        if (!OutPut.Contains(Command.Parameters[i].ParameterName.ToString()))
                        {
                            OutPut.Add(Command.Parameters[i].ParameterName.ToString(), Command.Parameters[i].Value.ToString());
                        }
                    }
                }
                // 清除参数,以便再次使用.
                Command.Parameters.Clear();

                Command.Dispose();

                return retval;
            }
        }
        /// <summary>
        /// DataTable批量添加到数据库
        /// </summary>
        /// <param name="TableName">要写入的表名</param>
        /// <param name="dt">DataTable表</param>
        public static void CopyExecutNonQuery(string TableName, DataTable dt)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {
                connection.Open();
                using (SqlTransaction Trans = connection.BeginTransaction())
                {
                    using (SqlBulkCopy sqlBC = new SqlBulkCopy(connection, SqlBulkCopyOptions.FireTriggers, Trans))
                    {
                        try
                        {
                            //一次批量的插入的数据量
                            sqlBC.BatchSize = dt.Rows.Count;
                            //超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
                            sqlBC.BulkCopyTimeout = 360;

                            //設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。 
                            // sqlBC.NotifyAfter = 1000;
                            // sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);

                            //设置要批量写入的表
                            sqlBC.DestinationTableName = TableName;

                            //自定义的datatable和数据库的字段进行对应
                            //sqlBC.ColumnMappings.Add("id", "tel");
                            //sqlBC.ColumnMappings.Add("name", "neirong");
                            //for (int i = 0; i < dtColum.Count; i++)
                            //{
                            //    sqlBC.ColumnMappings.Add(dtColum[i].ColumnName.ToString(), dtColum[i].ColumnName.ToString());
                            //}
                            //批量写入
                            sqlBC.WriteToServer(dt);
                            Trans.Commit();
                        }
                        catch
                        {
                            Trans.Rollback();
                        }

                    }
                }
            }
        }
        /// <summary>
        ///  执行指定数据库连接对象的命令
        /// </summary>
        /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
        /// <param name="commandText">T存储过程名称或SQL语句</param>
        /// <param name="commandParameters">SqlParamter参数数组</param>
        /// <returns>返回影响的行数</returns>
        public static int ExecuteNonQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {
                connection.Open();
                // 创建DbCommand命令,并进行预处理

                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);

                // 执行命令
                int retval = Command.ExecuteNonQuery();
                // 清除参数,以便再次使用.
                Command.Parameters.Clear();

                Command.Dispose();

                return retval;
            }
        }
        public static int ExecuteNonQuery(SqlTransaction Transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {

            bool mustCloseConnection = false;
            SqlCommand Command = new SqlCommand(); ;
            PrepareCommand(Transaction.Connection, Command, Transaction, commandType, commandText, commandParameters, out mustCloseConnection);

            try
            {
                // 执行命令
                int retval = Command.ExecuteNonQuery();

                // 清除参数,以便再次使用.
                Command.Parameters.Clear();
                if (Transaction != null)
                {
                    Transaction.Commit();
                }

                Command.Dispose();
                if (mustCloseConnection)
                {
                    Transaction.Connection.Close();
                    Transaction.Connection.Dispose();
                }
                return retval;
            }
            catch (Exception ex)
            {
                if (Transaction != null)
                {
                    Transaction.Rollback();
                }

                Command.Dispose();
                return 0;
            }
        }
        public static int ExecuteNonQuery(out int Scope_Identity, SqlTransaction Transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            Scope_Identity = 0;


            bool mustCloseConnection = false;
            SqlCommand Command = new SqlCommand();
            PrepareCommand(Transaction.Connection, Command, Transaction, commandType, commandText, commandParameters, out mustCloseConnection);

            try
            {
                // 执行命令
                int retval = Command.ExecuteNonQuery();
                // 清除参数,以便再次使用.
                Command.Parameters.Clear();
                Command.CommandType = CommandType.Text;
                Command.CommandText = "SELECT SCOPE_IDENTITY()";
                Scope_Identity = int.Parse(Command.ExecuteScalar().ToString());

                Command.Dispose();
                if (mustCloseConnection)
                {
                    Transaction.Connection.Close();
                    Transaction.Connection.Dispose();
                }
                return retval;
            }
            catch (Exception ex)
            {
                Command.Dispose();
                Transaction.Connection.Close();
                Transaction.Connection.Dispose();
                return 0;
            }
        }
        /// <summary>
        /// 执行指定数据库连接对象的命令,并输出最后执行的结果编号
        /// </summary>
        /// <param name="Scope_Identity">输出最后执行结果</param>
        /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
        /// <param name="commandText">T存储过程名称或SQL语句</param>
        /// <param name="commandParameters">SqlParamter参数数组</param>
        /// <returns>返回影响的行数</returns>
        public static int ExecuteNonQuery(out int Scope_Identity, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {

            Scope_Identity = 0;
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {

                connection.Open();
                // 创建DbCommand命令,并进行预处理

                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);

                try
                {
                    // 执行命令
                    int retval = Command.ExecuteNonQuery();
                    // 清除参数,以便再次使用.
                    Command.Parameters.Clear();
                    Command.CommandType = CommandType.Text;
                    Command.CommandText = "SELECT SCOPE_IDENTITY()";
                    Scope_Identity = int.Parse(Command.ExecuteScalar().ToString());

                    Command.Dispose();
                    return retval;
                }
                catch (Exception ex)
                {

                    Command.Dispose();
                    return 0;
                }
            }
        }
        /// <summary>
        /// 执行指定数据库连接对象的命令 
        /// </summary>
        /// <param name="connection">一个有效的数据库连接对象</param>
        /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
        /// <param name="commandText">存储过程名称或SQL语句</param>
        /// <returns>返回影响的行数</returns>
        public static int ExecuteNonQuery(CommandType commandType, string CommandText)
        {
            if (CommandText == null || CommandText.Length == 0) throw new ArgumentNullException("commandText");
            return ExecuteNonQuery(commandType, CommandText, (SqlParameter[])null);
        }
        /// <summary>
        /// 执行指定数据库连接对象的命令,将对象数组的值赋给存储过程参数.
        /// </summary>
        /// <param name="connection">一个有效的数据库连接对象</param>
        /// <param name="spName">存储过程名</param>
        /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
        /// <returns>返回影响的行数</returns>
        public static int ExecuteNonQuery(string spName, params SqlParameter[] commandParameters)
        {

            if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");

            // 如果有参数值
            if ((commandParameters != null) && (commandParameters.Length > 0))
            {
                return ExecuteNonQuery(CommandType.StoredProcedure, spName, commandParameters);
            }
            else
            {
                return ExecuteNonQuery(CommandType.StoredProcedure, spName);
            }
        }

        /// <summary>
        /// 执行带事务的SQL语句
        /// </summary>
        /// <param name="commandText"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string commandText)
        {
            if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
            //SqlTransaction Transaction = BBDataProvider.Transaction;
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {
                connection.Open();
                SqlTransaction Transaction = connection.BeginTransaction();

                return ExecuteNonQuery(Transaction, CommandType.Text, commandText, (SqlParameter[])null);
            }
        }
        /// <summary>
        /// 执行存储过程,返回Output结果
        /// </summary>
        /// <param name="commandText">存储过程名</param>
        /// <param name="commandType">命令类型(存储过程)</param>
        /// <param name="commandParameters">SqlParamter参数数组</param>
        /// <returns>Output结果</returns>
        public static List<string[]> ExecuteNonQuery(string commandText, CommandType commandType, params SqlParameter[] commandParameters)
        {
            if (SqlConnectionString == null || SqlConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

            using (SqlConnection connection = new SqlConnection(SqlConnectionString))
            {
                connection.Open();
                bool mustCloseConnection = false;
                SqlCommand Command = new SqlCommand();
                PrepareCommand(connection, Command, (SqlTransaction)null, CommandType.StoredProcedure, commandText, commandParameters, out mustCloseConnection);
                try
                {
                    Command.ExecuteNonQuery();
                }
                catch { }

                List<string[]> outParameters = new List<string[]>();
                for (int i = 0; i < Command.Parameters.Count; i++)
                {
                    if (Command.Parameters[i].Direction == ParameterDirection.Output)
                    {
                        string[] parameteritem = { Command.Parameters[i].ParameterName.ToString(), Command.Parameters[i].Value.ToString() };
                        outParameters.Add(parameteritem);
                    }
                }
                Command.Parameters.Clear();//清空

                Command.Dispose();
                if (mustCloseConnection)
                    connection.Close();
                return outParameters;
            }
        }

        #endregion
    }
}

  

转载于:https://www.cnblogs.com/flashfyz/archive/2012/12/24/2831483.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值