ADO.NET sqlhelper通用类库

本文封转ado.net的常用操作,若是项目中用到此工具类,直接copy过去即可,省得每次开发都做同样的事情,当然了,用orm框架是另一种选择,这里不做过多讨论

    /// <summary>
    /// 使用ado.net无外乎,文本,存储过程,事务,本文分别做了封装
    /// 使用者直接复制进自己的项目持久层(DAL),在表现层项目配置文件中配置自己的连接字符串name为ConnStr即可调用
    /// 用户还可以自己封装成接口,或者使用依赖注入的方式提供给业务逻辑层(BLL)
    /// </summary>
    public class SqlHelper
    {
        //连接字符串的那么为ConnStr
        private static readonly string ConnStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;

        private static readonly string ConnStrExtend = ConfigurationManager.ConnectionStrings["ConnStrExtend"].ConnectionString;

        private static readonly SqlConnection SqlConn = new SqlConnection(ConnStr);
private static readonly SqlConnection SqlConnExtend = new SqlConnection(ConnStrExtend );

        private  SqlHelper()
        {


        }


        /// <summary>
        /// 封装ado.net的ExecQuery
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static DataTable ExecQuery(string sql, SqlParameter[] paramers)
        {
            try
            {
                var sqlDataAdapter = new SqlDataAdapter(sql, SqlConn);
                if (paramers != null)
                {
                    sqlDataAdapter.SelectCommand.Parameters.AddRange(paramers);
                }
                SqlConn.Open();
                var dataTable = new DataTable();
                sqlDataAdapter.Fill(dataTable);
                return dataTable;
            }
            catch (Exception e)
            {
                return null;
            }
            finally
            {
                SqlConn.Close();
            }
        }
        /// <summary>
        /// 封装ado.net的ExecScalar
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static object ExecScalar(string sql, SqlParameter[] paramers)
        { 
            try
            {
                var sqlCommand = new SqlCommand(sql, SqlConn);
                if (paramers != null)
                {
                    sqlCommand.Parameters.AddRange(paramers);
                }
                sqlCommand.CommandType = CommandType.Text;
                SqlConn.Open();
                return sqlCommand.ExecuteScalar();
            }
            catch (Exception e)
            {
                return null;
            }
            finally
            {
                SqlConn.Close();
            }
        }
        /// <summary>
        /// 封装ado.net的ExecNonQuery
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static int ExecNonQuery(string sql, SqlParameter[] paramers)
        {
            try
            {
                var sqlCommand = new SqlCommand(sql, SqlConn);
                if (paramers != null)
                {
                    sqlCommand.Parameters.AddRange(paramers);
                }
                sqlCommand.CommandType = CommandType.Text;
                SqlConn.Open();
                return sqlCommand.ExecuteNonQuery();
            }
            catch(Exception e)
            {
                return int.MinValue;
            }
            finally
            {
                SqlConn.Close();
            }
        }
        /// <summary>
        /// 封装ado.net的存储过程的更新操作
        /// </summary>
        /// <param name="name"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static int ExecStoredProcedureAsUpdate(string name, SqlParameter[] paramers)
        {
            try
            {
                var sqlCommand = new SqlCommand(name, SqlConn);
                sqlCommand.Parameters.AddRange(paramers);
                sqlCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
                sqlCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                sqlCommand.CommandType = CommandType.StoredProcedure;
                SqlConn.Open();
                sqlCommand.ExecuteNonQuery();
                return int.Parse(sqlCommand.Parameters["@return"].Value.ToString());
            }
            catch (Exception e)
            {
                return int.MinValue;
            }
            finally
            {
                SqlConn.Close();
            }
        }
        /// <summary>
        /// 封装ado.net的存储过程的查询操作
        /// </summary>
        /// <param name="name"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static DataTable ExecStoredProcedureAsQuery(string name, SqlParameter[] paramers)
        {
            try
            {
                var sqlDataAdapter = new SqlDataAdapter(name, SqlConn);
                sqlDataAdapter.SelectCommand.Parameters.AddRange(paramers);
                sqlDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
                sqlDataAdapter.SelectCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                sqlDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                SqlConn.Open();
                var dataTable = new DataTable();
                sqlDataAdapter.Fill(dataTable);
                return dataTable;
            }
            catch (Exception e)
            {
                return null;
            }
            finally
            {
                SqlConn.Close();
            }
        }
        /// <summary>
        /// 封装ado.net的事务的更新操作,不能跨越多个数据库连接
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paramers"></param>
        /// <returns></returns>
        public static int[] ExecTransactionAsUpdate(string[] sql, List<SqlParameter[]> paramers)
        {
            if (sql.Length == paramers.Count)
            {

                int[] i = new int[sql.length];
                int rowCount = 0;//影响的行数
                SqlTransaction sqlTransaction = SqlConn.BeginTransaction();
                var sqlCommand = new SqlCommand { Transaction = sqlTransaction, Connection = SqlConn,CommandType = CommandType.Text};
                SqlConn.Open();
                try
                {
                    for (int i = 0; i < sql.Length; i++)
                    {
                        sqlCommand.CommandText = sql[i];
                        if (paramers[i] != null)
                        {
                            sqlCommand.Parameters.AddRange(paramers[i]);
                        }
                        i[i] = sqlCommand.ExecuteNonQuery();
                    }
                    sqlTransaction.Commit();
                    return i;
                }
                catch (Exception e)
                {
                    sqlTransaction.Rollback();
                    return null;
                }
                finally
                {
                    SqlConn.Close();
                }
            }
            return null;
        }
    }

        /// <summary>
        /// 封装ado.net的事务的更新操作,可以跨越两个数据库连接
        /// </summary>
        /// <param name="sqlConnStr"></param>
        /// <param name="paramersConnStr"></param>
        /// <param name="sqlConnStrExtend"></param>
        /// <param name="paramersConnStrExtend"></param>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <returns></returns>
public static bool ExecTransactionAsUpdate(string[] sqlConnStr, List<SqlParameter[]> paramersConnStr,string[] sqlConnStrExtend, List<SqlParameter[]> paramersConnStrExtend,out int[] i,out int[] j){
try{
using (TransactionScope cope = new TransactionScope())
{
if(sqlConnStr.length == paramersConnStr.count){
SqlConn.Open();
var sqlCommand = new SqlCommand {Connection = SqlConn,CommandType = CommandType.Text};
for (int i = 0; i < sqlConnStr.Length; i++)
{
sqlCommand.CommandText = sqlConnStr[i];
if (paramersConnStr[i] != null)
{
sqlCommand.Parameters.AddRange(paramersConnStr[i]);
}
i[i] = sqlCommand.ExecuteNonQuery();
}
}
if(sqlConnStrExtend.length == paramersConnStrExtend.count){
SqlConnExtend.Open();
var sqlCommand = new SqlCommand {Connection = ConnStrExtend,CommandType = CommandType.Text};
for (int i = 0; i < sqlConnStrExtend.Length; i++)
{
sqlCommand.CommandText = sqlConnStrExtend[i];
if (paramersConnStr[i] != null)
{
sqlCommand.Parameters.AddRange(paramersConnStrExtend[i]);
}
j[i] = sqlCommand.ExecuteNonQuery();
}
}
cope.Complete();
}
return true;
}catch(Exception e){
return false;
}finally{
SqlConn.Close();
SqlConnExtend.close();
}
return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值