SqlServerHelper,支持批量插入,事务,DataTable转实体,转实体类要用到的类,请查看往期随笔-- c# +泛型+自定义属性 实现 DataTable转换成实体类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Web;

using System.Data.SqlClient;

using System.Configuration;

using System.Diagnostics;

namespace XXX.XXX

{

    /// <summary>

    /// 页面名  :数据库操作类<br/>

    /// 说明    :<br/>

    /// 作者    :niu<br/>

    /// 创建时间:2011-12-13<br/>

    /// 最后修改:<br/>

    /// </summary>

    public class SqlServerHelper

    {

        private static readonly string connectionString = "server=.;uid=sa;pwd=******;database=XXX";

        #region AddInParameter 添加输入参数

        /// <summary>

        /// 添加In参数

        /// </summary>

        /// <param name="paramName">参数名</param>

        /// <param name="value"></param>

        /// <returns>返回一个SqlParameter对象</returns>

        public static SqlParameter AddInParameter(string paramName, object value)

        {

            SqlParameter param = new SqlParameter(paramName, value);

            return param;

        }



        /// <summary>

        /// 添加In参数

        /// </summary>

        /// <param name="paramName">参数名</param>

        /// <param name="dbType">数据类型</param>

        /// <param name="value"></param>

        /// <returns>返回一个SqlParameter对象</returns>

        public static SqlParameter AddInParameter(string paramName, SqlDbType dbType, object value)

        {

            return AddInParameter(paramName, dbType, 0, value);

        }

        /// <summary>

        /// 添加In参数

        /// </summary>

        /// <param name="paramName">参数名</param>

        /// <param name="dbType">数据类型</param>

        /// <param name="size">字段大小</param>

        /// <param name="value"></param>

        /// <returns>返回一个SqlParameter对象</returns>

        public static SqlParameter AddInParameter(string paramName, SqlDbType dbType, int size, object value)

        {

            SqlParameter param;

            if (size > 0)

                param = new SqlParameter(paramName, dbType, size);

            else

                param = new SqlParameter(paramName, dbType);

            param.Value = value;



            return param;

        }

        #endregion



        #region AddOutParameter 添加输出参数

        /// <summary>

        /// 添加Out参数

        /// </summary>

        /// <param name="paramName">参数名</param>

        /// <param name="dbType">数据类型</param>

        /// <returns>返回一个SqlParameter对象</returns>

        public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType)

        {

            return AddOutParameter(paramName, dbType, 0, null);

        }



        /// <summary>

        /// 添加Out参数

        /// </summary>

        /// <param name="paramName">参数名</param>

        /// <param name="dbType">数据类型</param>

        /// <param name="size">字段大小</param>

        /// <returns>返回一个SqlParameter对象</returns>

        public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType, int size)

        {

            return AddOutParameter(paramName, dbType, size, null);

        }

        public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType, int size, object value)

        {

            SqlParameter param;

            if (size > 0)

            {

                param = new SqlParameter(paramName, dbType, size);

            }

            else

            {

                param = new SqlParameter(paramName, dbType);

            }

            if (value != null)

            {

                param.Value = value;

            }

            param.Direction = ParameterDirection.Output;



            return param;

        }

        #endregion



        #region PrepareCommand 

        private static void PrepareCommand(SqlConnection conn, SqlCommand cmd, CommandType cmdType, string cmdText, int timeout, SqlParameter[] cmdParms)

        {

            cmd.Connection = conn;

            cmd.CommandText = cmdText;

            cmd.CommandType = cmdType;

            if (timeout > 30) cmd.CommandTimeout = timeout;

            if (cmdParms != null)

            {

                foreach (SqlParameter parm in cmdParms)

                {

                    if ((parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input) && (parm.Value == null))

                    {

                        parm.Value = DBNull.Value;

                    }



                    cmd.Parameters.Add(parm);

                }

            }

            if (conn.State != ConnectionState.Open)

            {

                try

                {

                    conn.Open();

                }

                catch { }

            }

          

        }

        private static void PrepareCommand(SqlConnection conn, SqlCommand cmd, CommandType cmdType, string cmdText, int timeout, List<SqlParameter> cmdParms)

        {

            cmd.Connection = conn;

            cmd.CommandText = cmdText;

            cmd.CommandType = cmdType;

            if (timeout > 30) cmd.CommandTimeout = timeout;

            if (cmdParms != null)

            {

                foreach (SqlParameter parm in cmdParms)

                {

                    if ((parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input) && (parm.Value == null))

                    {

                        parm.Value = DBNull.Value;

                    }

                    cmd.Parameters.Add(parm);

                }

            }

            if (conn.State != ConnectionState.Open)

            {

                try

                {

                    conn.Open();

                }

                catch { }

            }

           

        }

        #endregion



        #region ConnClose 关闭数据库连接

        private static void ConnClose(SqlConnection conn)

        {

            if (conn!=null && conn.State == System.Data.ConnectionState.Open)

            {

                conn.Close();

            }

        }

        #endregion



        #region 直接返回Model



        public static T ExecuteModel<T>(string cmdText, params  SqlParameter[] cmdParms) where T : new()

        {

            return ExecuteModel<T>(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static T ExecuteModel<T>(string cmdText, List<SqlParameter> cmdParms) where T : new()

        {

            return ExecuteModel<T>(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static T ExecuteModel<T>(string cmdText) where T : new()

        {

            return ExecuteModel<T>(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }



        public static T ExecuteModel<T>(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms) where T : new()

        {

            try

            {

                DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms);

                if (t.Rows.Count > 0)

                {

                    return DataConvert.DataRowToModel<T>(t.Rows[0]);

                }

                else

                {

                    return default(T);

                }

            }

            catch (Exception ex)

            {

                

               

                /*使用 default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。对于结构,

                 * 此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型*/

                return default(T);

            }

        }



        public static T ExecuteModel<T>(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) where T : new()

        {

            try

            {

                DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms);

                if (t.Rows.Count > 0)

                {

                    return DataConvert.DataRowToModel<T>(t.Rows[0]);

                }

                else

                {

                    return default(T);

                }

            }

            catch (Exception ex)

            {



             

                return default(T);

            }

        }

        #endregion



        #region 直接返回IList



        public static IList<T> ExecuteIList<T>(string cmdText, params  SqlParameter[] cmdParms) where T : new()

        {

            return ExecuteIList<T>(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static IList<T> ExecuteIList<T>(string cmdText, List<SqlParameter> cmdParms) where T : new()

        {

            return ExecuteIList<T>(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static IList<T> ExecuteIList<T>(string cmdText) where T : new()

        {

            return ExecuteIList<T>(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }



        public static IList<T> ExecuteIList<T>(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms) where T : new()

        {

            try

            {

                DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms);

                if (t.Rows.Count > 0)

                {

                    return DataConvert.DataTableToList<T>(t);

                }

                else

                {

                    return new List<T>();

                }

            }

            catch (Exception ex)

            {

             

                return new List<T>();

            }

        }



        public static IList<T> ExecuteIList<T>(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) where T : new()

        {

            try

            {

                DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms);

                if (t.Rows.Count > 0)

                {

                    return DataConvert.DataTableToList<T>(t);

                }

                else

                {

                    return new List<T>();

                }

            }

            catch (Exception ex)

            {

              

                return new List<T>();

            }

        }



        #endregion



        #region 返回DataTable,DataSet,执行更新

      

        /// <summary>

        /// 标量查询,返回查询结果集中第一行的第一列。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回值</returns>

        public static object ExecuteScalar(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    object retval = null;

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        retval = myCmd.ExecuteScalar();

                    }

                    catch (Exception ex)

                    {

                       

                        return null;

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        ConnClose(myConn);

                    }

                    return retval;

                }

            }

        }

        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    SqlDataAdapter myda = null;

                    DataTable dt = new DataTable();

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        myda = new SqlDataAdapter(myCmd);

                        myda.Fill(dt);

                    }

                    catch (Exception ex)

                    {

                        

                       

                        return new DataTable();

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        myda.Dispose();

                        ConnClose(myConn);

                    }

                    return dt;

                }

            }

        }

        /// <summary>

        /// 创建DataSet

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataSet 对象。</returns>

        public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    SqlDataAdapter myda = null;

                    DataSet ds = new DataSet();

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        myda = new SqlDataAdapter(myCmd);

                        myda.Fill(ds);

                    }

                    catch (Exception ex)

                    {

                        

                        return new DataSet();

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        myda.Dispose();

                        ConnClose(myConn);

                    }

                    return ds;

                }

            }

        }

        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    SqlDataAdapter myda = null;

                    DataTable dt = new DataTable();

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        myda = new SqlDataAdapter(myCmd);

                        myda.Fill(dt);

                    }

                    catch (Exception ex)

                    {

                       

                        return new DataTable();

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        myda.Dispose();

                        ConnClose(myConn);

                    }

                    return dt;

                }

            }

        }

        

        #endregion



        #region 快捷方法



        #region ExecuteDataTable 创建DataTable

        public static DataTable ExecuteDataTable(string cmdText)

        {

            return ExecuteDataTable(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }

        public static DataTable ExecuteDataTable(string cmdText, List<SqlParameter> cmdParms)

        {

            return ExecuteDataTable(cmdText, CommandType.Text, 30, cmdParms);

        }



        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataTable(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns> DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteDataTable(cmdText, cmdType, 60, cmdParms);

        }





        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="ConnectionString">数据库连接字符串</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string ConnectionString, string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataTable(ConnectionString, cmdText, CommandType.Text, cmdParms);

        }



        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="ConnectionString">数据库连接字符串</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataTable ExecuteDataTable(string ConnectionString, string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(ConnectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    SqlDataAdapter myda = null;

                    DataTable dt = new DataTable();

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, 60, cmdParms);

                        myda = new SqlDataAdapter(myCmd);

                        myda.Fill(dt);

                    }

                    catch (Exception ex)

                    {

                        throw new Exception(ex.Message);

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        myda.Dispose();

                        ConnClose(myConn);

                    }

                    return dt;

                }

            }

        }

        #endregion



        #region ExecuteDataRow 返回一行数据

        public static DataRow ExecuteDataRow(string cmdText)

        {

            return ExecuteDataRow(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }

        public static DataRow ExecuteDataRow(string cmdText, List<SqlParameter> cmdParms)

        {

            return ExecuteDataRow(cmdText, CommandType.Text, 30, cmdParms);

        }



        /// <summary>

        /// DataRow

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataRow(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 创建DataTable

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns> DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteDataRow(cmdText, cmdType, 60, cmdParms);

        }





        /// <summary>

        /// DataRow

        /// </summary>

        /// <param name="ConnectionString">数据库连接字符串</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string ConnectionString, string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataRow(ConnectionString, cmdText, CommandType.Text, cmdParms);

        }



        /// <summary>

        /// DataRow

        /// </summary>

        /// <param name="ConnectionString">数据库连接字符串</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string ConnectionString, string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            DataTable table = ExecuteDataTable(ConnectionString, cmdText, cmdType, cmdParms);

            if (table != null) {

                if (table.Rows.Count > 0)

                {

                    return table.Rows[0];

                }

            }

            return null;

        }



        /// <summary>

        /// 返回DataRow

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms)

        {

            DataTable table = ExecuteDataTable( cmdText,  cmdType,  timeOut, cmdParms);

            if (table != null)

            {

                if (table.Rows.Count > 0)

                {

                    return table.Rows[0];

                }

            }

            return null;

        }

        /// <summary>

        /// DataRow

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>DataTable 对象。</returns>

        public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms)

        {

            DataTable table = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms);

            if (table != null)

            {

                if (table.Rows.Count > 0)

                {

                    return table.Rows[0];

                }

            }

            return null;

        }

        #endregion



        #region ExecuteNonQuery

        public static int ExecuteNonQueryStoredProcedure(string cmdText, params  SqlParameter[] cmdParms)

        {

            return ExecuteNonQuery(cmdText, CommandType.StoredProcedure, 30, cmdParms);

        }



        public static int ExecuteNonQuery(string cmdText, List<SqlParameter> cmdParms)

        {

            return ExecuteNonQuery(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static int ExecuteNonQuery(string cmdText)

        {

            return ExecuteNonQuery(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQuery(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteNonQuery(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteNonQuery(cmdText, cmdType, 60, cmdParms);

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQuery(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    int retval = 0;

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        retval = myCmd.ExecuteNonQuery();

                    }

                    catch (Exception ex)

                    {



                        return 0;

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        ConnClose(myConn);

                    }

                    return retval;

                }

            }

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQuery(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                using (SqlCommand myCmd = new SqlCommand())

                {

                    int retval = 0;

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                        retval = myCmd.ExecuteNonQuery();

                    }

                    catch (Exception ex)

                    {

                        throw ex;



                        return 0;

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        myCmd.Dispose();

                        ConnClose(myConn);

                    }

                    return retval;

                }

            }

        }

        #endregion



        #region ExecuteDataSet 创建DataSet

        /// <summary>

        /// 创建DataSet

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns> DataSet 对象。</returns>

        public static DataSet ExecuteDataSet(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataSet(cmdText, CommandType.Text, 60, cmdParms);

        }



        /// <summary>

        /// 创建DataSet

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">设Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns> DataSet 对象。</returns>

        public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteDataSet(cmdText, cmdType, 60, cmdParms);

        }

        #endregion



        #region ExecuteDataReader 创建SqlDataReader

        /// <summary>

        /// 创建 SqlDataReader。

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns> SqlDataReader 对象。</returns>

        public static SqlDataReader ExecuteDataReader(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteDataReader(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 创建 SqlDataReader。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>一个 SqlDataReader 对象。</returns>

        public static SqlDataReader ExecuteDataReader(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteDataReader(cmdText, cmdType, 60, cmdParms);

        }

        /// <summary>

        /// 创建 SqlDataReader。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>一个 SqlDataReader 对象。</returns>

        public static SqlDataReader ExecuteDataReader(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms)

        {

            SqlConnection myConn = new SqlConnection(connectionString);

            SqlCommand myCmd = new SqlCommand();

            SqlDataReader dr = null;

            try

            {

                PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                dr = myCmd.ExecuteReader(CommandBehavior.CloseConnection);

            }

            catch (Exception ex)

            {

                ConnClose(myConn);

                throw new Exception(ex.Message);

            }

            finally

            {

                if (cmdParms != null)

                {

                    myCmd.Parameters.Clear();

                }

            }

            return dr;

        }

        #endregion



        #region  ExecuteNonQueryTran 执行带事务的批量SQL语句

        public static int ExecuteNonQueryTranStoredProcedure(string cmdText, params  SqlParameter[] cmdParms)

        {

            return ExecuteNonQueryTran(cmdText, CommandType.StoredProcedure, 30, cmdParms);

        }



        public static int ExecuteNonQueryTran(string cmdText, List<SqlParameter> cmdParms)

        {

            return ExecuteNonQueryTran(cmdText, CommandType.Text, 30, cmdParms);

        }

        public static int ExecuteNonQueryTran(string cmdText)

        {

            return ExecuteNonQueryTran(cmdText, CommandType.Text, 30, new List<SqlParameter>());

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQueryTran(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteNonQueryTran(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteNonQueryTran(cmdText, cmdType, 60, cmdParms);

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                myConn.Open();

                SqlTransaction tran = myConn.BeginTransaction();

                using (SqlCommand myCmd = new SqlCommand())

                {

                    int retval = 0;

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);

                      

                        myCmd.Transaction = tran;

                        retval = myCmd.ExecuteNonQuery();

                        tran.Commit();

                    }

                    catch (Exception ex)

                    {

                        tran.Rollback();

                        return 0;

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        tran.Dispose();

                        myCmd.Dispose();

                        ConnClose(myConn);

                    }

                    return retval;

                }

            }

        }

        /// <summary>

        /// 对连接对象执行 SQL 语句。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="timeOut">超时时间</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回受影响的行数。</returns>

        public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, int timeOut, params  SqlParameter[] cmdParms)

        {

            using (SqlConnection myConn = new SqlConnection(connectionString))

            {

                myConn.Open();

                SqlTransaction tran = myConn.BeginTransaction();

                using (SqlCommand myCmd = new SqlCommand())

                {

                    int retval = 0;

                    try

                    {

                        PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms);



                        myCmd.Transaction = tran;

                        retval = myCmd.ExecuteNonQuery();

                        tran.Commit();

                    }

                    catch (Exception ex)

                    {

                        tran.Rollback();

                        return 0;

                    }

                    finally

                    {

                        if (cmdParms != null)

                        {

                            myCmd.Parameters.Clear();

                        }

                        tran.Dispose();

                        myCmd.Dispose();

                        ConnClose(myConn);



                    }

                    return retval;

                }

            }

        }



        #endregion



        #region ExecuteScalar 执行标量查询

        /// <summary>

        /// 标量查询,返回查询结果集中第一行的第一列。

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回值</returns>

        public static Object ExecuteScalar(string cmdText, params SqlParameter[] cmdParms)

        {

            return ExecuteScalar(cmdText, CommandType.Text, 60, cmdParms);

        }

        /// <summary>

        /// 标量查询,返回查询结果集中第一行的第一列。

        /// </summary>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回值</returns>

        public static int ExecuteScalar<Int32>(string cmdText, params SqlParameter[] cmdParms) 

        { 

          

            object obj= ExecuteScalar(cmdText, CommandType.Text, 60, cmdParms);

            int result = -1;

            if (obj != null) {



                int.TryParse(obj.ToString(), out result);

            }

            return result;

        }



        /// <summary>

        /// 标量查询,返回查询结果集中第一行的第一列。

        /// </summary>

        /// <param name="cmdType">该值指示如何解释 CommandText 属性</param>

        /// <param name="cmdText">Transact-SQL 语句或存储过程。</param>

        /// <param name="cmdParms">参数列表,params变长数组的形式</param>

        /// <returns>返回值</returns>

        public static Object ExecuteScalar(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms)

        {

            return ExecuteScalar(cmdText, cmdType, 60, cmdParms);

        }

        #endregion



        #region ExecuteBulkInsert 批量插入数据

        public static int ExecuteBulkInsert(DataTable t)

        {

            try

            {

                SqlBulkCopy bulk = new SqlBulkCopy(connectionString);

                bulk.BatchSize = t.Rows.Count;

                bulk.DestinationTableName = t.TableName;

                bulk.WriteToServer(t);

                return t.Rows.Count;

            }

            catch {

                return 0;

            }

        }

      

        #endregion



        #region getMaxID

        public static int getMaxID(string fieldName, string tableName)

        {

            string sql = "select max("+fieldName+") from "+tableName;

            object obj=  ExecuteScalar(sql);

            int maxId = -1;

            if (obj != null) {

                int.TryParse(obj.ToString(), out maxId);

            }

            return maxId;

        }

        #endregion



        #endregion



        #region 返回分页列表

        public static DataTable getList(TableEnum tableName, string getFields, string OrderField, string whereCondition, int pageSize, int pageIndex, ref int recordCount)

        {

            try

            {

                int startIndex = pageSize * (pageIndex - 1);

                string sql = "select " + getFields + " from [" + Enum.GetName(typeof(TableEnum), tableName)+"]";

                if (!string.IsNullOrEmpty(whereCondition)) {

                    sql += " where " + whereCondition;

                }

              string sqlCount = "select count(1) from (" + sql + ") T";

              sql += " order by " + OrderField;// +" limit " + startIndex + "," + pageSize;//跳过多少条,选择多少条,

              /*

               如果我要去11-20的Account表的数据 Select * From Account Limit 9 Offset 10; 

               * 以上语句表示从Account表获取数据,跳过10行,取9行嗯,

               * 也可以这样写 select * from account limit 10,9和上面的的效果一样。 通用公试: 

               * sql = "select * from FlyCrocodile where "+条件+" order by "+排序+" limit "+要显示多少条记录+" offset "+跳过多少条记录;

               * 如: select * from flycrocodile limit 15 offset 20  

               * 意思是说:   从flycrocodile表跳过20条记录选出15条记录

               */

              object obj = ExecuteScalar(sqlCount);

              DataTable table = new DataTable();

              int total = 0;

              if (obj != null)

              {

                  if (int.TryParse(obj.ToString(), out total))

                  {

                      table= ExecuteDataTable(sql);

                  }

              }

              recordCount = total;

              return table;

            }

            catch (Exception ex)

            {

                

               

                recordCount = 0;

                return new DataTable();

            }

        }

        public static IList<T> ExecuteIList<T>(TableEnum tableName, string getFields, string OrderField, string whereCondition, int pageSize, int pageIndex, ref int recordCount) where T : new()

        {

            DataTable table=getList( tableName,  getFields,  OrderField,  whereCondition,  pageSize,  pageIndex, ref  recordCount);

            return DataConvert.DataTableToList<T>(table);

        }

        public static DataTable getList(string cmdText, int pageSize, int pageIndex, ref int recordCount)

        {

            try

            {

                int startIndex = pageSize * (pageIndex - 1);

                string sqlCount = "select count(1) from (" + cmdText + ")";

                object obj = ExecuteScalar(sqlCount);

                DataTable table = new DataTable();

                int total = 0;

                if (obj != null)

                {

                    if (int.TryParse(obj.ToString(), out total))

                    {

                        table = ExecuteDataTable(cmdText);

                    }

                }

                recordCount = total;

                return table;

            }

            catch (Exception ex)

            {



               

                recordCount = 0;

                return new DataTable();

            }

        }

        public static DataTable FY(string cmdText, int pageSize, int pageIndex,string OrderField, ref int recordCount)

        {

            try

            {

                string sqlCount = "select count(1) from (" + cmdText + ")";

                cmdText = "select * from (select top " + pageSize + " * from (select top " + pageSize * pageIndex + " * from (" + cmdText + ") tmp order by " + OrderField + " desc) order by " + OrderField + ") order by " + OrderField + " desc";

                object obj = ExecuteScalar(sqlCount);

                DataTable table = new DataTable();

                int total = 0;

                if (obj != null)

                {

                    if (int.TryParse(obj.ToString(), out total))

                    {

                        table = ExecuteDataTable(cmdText);

                    }

                }

                recordCount = total;

                return table;

            }

            catch (Exception ex)

            {



              

                recordCount = 0;

                return new DataTable();

            }

        }

      

        #endregion



    }

    public enum TableEnum { }



}

你可能感兴趣的:(sqlserver)