C# ADO.NET SqlHelper

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

namespace Yahweh.DBUtility
{
    /// 
    /// 数据库操作类(SQLServer),通过数据库连接字符串,CommandType.Text 文本命令
    /// 
    public sealed class SqlHelper
    {
        /// 
        /// 数据库连接字符串
        /// 
        private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        /// 
        /// 执行一个SQL语句(连接字符串),返回受影响行数
        /// 
        /// 命令字符串
        /// 返回命令影响的行数
        public static int ExecuteNonQuery(string cmdTxt)
        {
            return ExecuteNonQuery(cmdTxt, null);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回受影响行数
        /// 
        /// 命令字符串
        /// 参数集
        /// 返回命令影响的行数
        public static int ExecuteNonQuery(string cmdTxt, params SqlParameter[] paras)
        {
            return ExecuteNonQuery(cmdTxt, CommandType.Text, paras);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回受影响行数
        /// 
        /// 命令字符串
        /// 命令类型
        /// 参数集
        /// 返回命令影响的行数
        public static int ExecuteNonQuery(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
        {
            // using 的方式创建数据库连接对象,并在执行完后释放资源
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                // 通过无参构造方法,创建数据库操作命令对象
                SqlCommand cmd = new SqlCommand();
                // 调用PrePareCommand方法,预处理操作命令对象
                PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
                // 调用数据库操作命令对象的ExecuteNonQuery方法,执行SQL语句并返回受影响的行数
                int count = cmd.ExecuteNonQuery();
                // 移除数据库操作命令对象中的参数集
                cmd.Parameters.Clear();
                // 返回受影响的行数
                return count;
            }
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回DataReader对象
        /// 
        /// 命令字符串
        /// 返回一个DataReader对象
        public static SqlDataReader ExecuteReader(string cmdTxt)
        {
            return ExecuteReader(cmdTxt, null);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回DataReader对象
        /// 
        /// 命令字符串
        /// 参数集
        /// 
        public static SqlDataReader ExecuteReader(string cmdTxt, params SqlParameter[] paras)
        {
            return ExecuteReader(cmdTxt, CommandType.Text, paras);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回DataReader对象
        /// 
        /// 命令字符串
        /// 命令类型
        /// 参数集
        /// 返回一个DataReader对象
        public static SqlDataReader ExecuteReader(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
        {
            SqlConnection conn = new SqlConnection(connStr);
            SqlCommand cmd = new SqlCommand();
            
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
                // CommandBehavior.CloseConnection 执行命令时,关闭关联的 DataReader 对象时,关联的 Connection 对象也会关闭
                SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return sdr;
            }
            catch
            {
                conn.Close();
                throw;
            }
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个object对象
        /// 
        /// 命令字符串
        /// 返回一个object对象,对象中只包含一列。
        public static object ExecuteScalar(string cmdTxt)
        {
            return ExecuteScalar(cmdTxt, null);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个object对象
        /// 
        /// 命令字符串
        /// 参数集
        /// 返回一个object对象,对象中只包含一列。
        public static object ExecuteScalar(string cmdTxt, params SqlParameter[] paras)
        {
            return ExecuteScalar(cmdTxt, CommandType.Text, paras);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个object对象
        /// 
        /// 命令字符串
        /// 命令类型
        /// 参数集
        /// 返回一个object对象,对象中只包含一列。
        public static object ExecuteScalar(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
        {
            using (SqlConnection connection = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, connection, null, cmdType, cmdTxt, paras);
                Object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                if (val == null || val == DBNull.Value)
                {
                    return null;
                }
                return val;
            }
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个DataTable对象
        /// 
        /// 命令字符串
        /// 
        public static DataTable ExecuteDataTable(string cmdTxt)
        {
            return ExecuteDataTable(cmdTxt, null);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个DataTable对象
        /// 
        /// 命令字符串
        /// 参数集
        /// 
        public static DataTable ExecuteDataTable(string cmdTxt, params SqlParameter[] paras)
        {
            return ExecuteDataTable(cmdTxt, CommandType.Text, paras);
        }

        /// 
        /// 执行一个SQL语句(连接字符串),返回一个DataTable对象
        /// 
        /// 命令字符串
        /// 命令类型
        /// 参数集
        /// 返回一个DataTable对象
        public static DataTable ExecuteDataTable(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }

        /// 
        /// 根据一个SQL语句(连接字符串),返回一个DataSet对象
        /// 
        /// 命令字符串
        /// 返回一个DataSet对象
        public static DataSet ExecuteDataSet(string cmdTxt)
        {
            return ExecuteDataSet(cmdTxt, null);
        }

        /// 
        /// 根据一个SQL语句(连接字符串),返回一个DataSet对象
        /// 
        /// 命令字符串
        /// 参数集
        /// 返回一个DataSet对象
        public static DataSet ExecuteDataSet(string cmdTxt, params SqlParameter[] paras)
        {
            return ExecuteDataSet(cmdTxt, CommandType.Text, paras);
        }

        /// 
        /// 根据一个SQL语句(连接字符串),返回一个DataSet对象
        /// 
        /// 命令字符串
        /// 命令类型
        /// 参数集
        /// 返回一个DataSet对象
        public static DataSet ExecuteDataSet(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
        {
            using (SqlConnection connection = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, connection, null, cmdType, cmdTxt, paras);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        da.Fill(ds, "ds");
                        cmd.Parameters.Clear();
                    }
                    catch (SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    return ds;
                }
            }
        }

        /// 
        /// SqlCommand对象封装预处理
        /// 
        /// SqlCommand对象
        /// 数据库连接对象
        /// 数据库事务对象
        /// 命令类型
        /// 命令字符串
        /// 参数集
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdTxt, IEnumerable paras)
        {
            // 判断数据库连接状态,确保为Open状态
            if (conn.State != ConnectionState.Open)
                // 打开数据库连接。执行语句只有一条,可省略{}
                conn.Open();
            // 设置SqlCommand数据库连接对象
            cmd.Connection = conn;
            // 设置SqlCommand命令字符串(SQL语句)
            cmd.CommandText = cmdTxt;

            // 判断数据库事务对象,不为null,则设置SqlCommand数据库事务对象
            if (trans != null)
                cmd.Transaction = trans;

            // 设置SqlCommand命令类型,Text:文本命令 | StoredProcedure:存储过程
            cmd.CommandType = cmdType;

            // 判断参数集是否为null
            if (paras == null)
                return;
            // 设置SqlCommand参数集
            foreach (SqlParameter para in paras)
                cmd.Parameters.Add(para);
        }
    }
}
ADO   NET   SqlHelper
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章