VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1121|回复: 0

C#标准化SQL链接模板

[复制链接]

1

主题

1

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2022-7-16 15:14:05 | 显示全部楼层 |阅读模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace SQLDB
{
    public class SqlHelp
    {   //定义链接数据库字符串
        private static string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
        //定义conn
        private static SqlConnection conn;
        //定义cmd
        private static SqlCommand cmd;
        //实例化DataSet
        private static DataSet ds = new DataSet();
        #region 链接模型下标准化的数据通用访问类的三个方法
        /// <summary>
        /// 返回第一行第一列数据
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>返回第一行第一列数据</returns>
        public static object GetExecuteScalar(string sql)
        {
            //1.实例化conn
            conn = new SqlConnection(connString);
            //2.实例化cmd
            cmd = new SqlCommand(sql, conn);
            //3执行
            try
            {
                //4.打开
                conn.Open();
                //5.返回
                return cmd.ExecuteScalar();

            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                //6.关闭
                conn.Close();
            }
        }
        /// <summary>
        /// 读取所有数据到DataReader
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>返回所有数据到DataReader</returns>
        public static SqlDataReader GetExecuteReader(string sql)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化cmd
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                conn.Open();
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        /// <summary>
        /// 执行增删改
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>返回增删改受影响的行数整数类型</returns>
        public static int GetExecuteNonQuery(string sql)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化cmd
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

        #endregion
        #region 非链接模型下的数据通用访问类的两种方法
        /// <summary>
        /// 获取DataSet的Table中没有名称
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>返回没有表名称的DataSet</returns>
        public static DataSet GetDataSetNotTableName(string sql)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化CMD
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                conn.Open();
                //实例化dataReader
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                //填充到DataSet
                sda.Fill(ds);

            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conn.Close();
            }
            return ds;
        }
        /// <summary>
        /// 获得所有信息到DataSet内存数据库
        /// </summary>
        /// <param name="dic">键值对《键{表名称},值{查询语句}>》</param>
        /// <param name="KeyName">主键的列</param>
        /// <returns>返回带有主键和Table表名称的内存数据库</returns>
        public static DataSet GetDataSet(Dictionary<string, string> dic, string KeyName)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //执行
            try
            {
                foreach (KeyValuePair<string, string> item in dic)
                {
                    cmd = new SqlCommand(item.Value, conn);
                    //实例化DataAdapter
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    //定义sda的类型
                    sda.SelectCommand = cmd;
                    //实例化commandB 记录DataSet的操作过程,包括增删改
                    SqlCommandBuilder scb = new SqlCommandBuilder(sda);
                    //打开
                    conn.Open();
                    //填充DataSet
                    sda.Fill(ds, item.Key);
                    //定义表的主键
                    ds.Tables[item.Key].PrimaryKey = new DataColumn[] { ds.Tables[item.Key].Columns[KeyName] };
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conn.Close();
            }
            //返回
            return ds;
        }
        #endregion
        #region 链接模型下标准化的带有参数数组的数据通用访问类(重载)
        /// <summary>
        /// 参数化SQL语句的获得获得第一行第一列的数据
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="para">SQL参数数组</param>
        /// <returns>返回object类型</returns>
        public static object GetExecuteScalar(string sql, SqlParameter[] para)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化cmd
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                //打开
                conn.Open();
                if (para != null)//如果参数数组不为空的话
                {
                    //执行参数数组
                    cmd.Parameters.AddRange(para);
                }
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 参数化SQL语句的获取所有数据的链接模型
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="para">参数数组</param>
        /// <returns>返回DataReader</returns>
        public static SqlDataReader GetExecuteReader(string sql, SqlParameter[] para)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化cmd
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                conn.Open();
                if (para != null)//如果参数数组不为空的话
                {
                    //执行参数数组
                    cmd.Parameters.AddRange(para);
                }
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        /// <summary>
        /// 参数化SQL语句的执行增删改
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="para">参数数组</param>
        /// <returns>返回受影响的行数</returns>
        public static int GetExecuteNonQuery(string sql, SqlParameter[] para)
        {
            //实例化conn
            conn = new SqlConnection(connString);
            //实例化cmd
            cmd = new SqlCommand(sql, conn);
            //执行
            try
            {
                //打开
                conn.Open();
                if (para != null)//如果参数数组不为空的话
                {
                    //执行参数数组
                    cmd.Parameters.AddRange(para);
                }
                //返回所有数据
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表