SqlDBHelper(基础增删改查)

using System;
using System.Collections.Generic;
using System.Data.SqlClient;//引用数据库客户端
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Data;
namespace DAL
{
    public class DBHelper
    {
        //连接数据库
        static SqlConnection conn = new SqlConnection("Data Source=DESKTOP-H22HG80\\SQL2014;Initial Catalog=Unity6;Integrated Security=True");
        static SqlDataReader sdr;
        /// <summary>
        /// 获取数据流  查询、显示、绑定下拉
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        private static SqlDataReader GetDataReader(string sql)
        {
            try
            {
                //打开
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                //命令对象
                SqlCommand cmd = new SqlCommand(sql, conn);
                sdr = cmd.ExecuteReader();
                return sdr;
            }
            catch (Exception)
            {
                if (sdr != null && !sdr.IsClosed)//数据流关闭
                {
                    sdr.Close();
                }
                throw;
            }

        }
        /// <summary>
        /// 返回受影响行数  
        /// 添加、删除、修改
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string sql)
        {
            try
            {
                //打开
                //判断状态
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                //命令对象
                SqlCommand cmd = new SqlCommand(sql, conn);
                int n = cmd.ExecuteNonQuery();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
                return n;
            }
            catch (Exception)
            {

                throw;
            }
        }
        /// <summary>
        /// 数据流转List
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sdr"></param>
        /// <returns></returns>
        private static List<T> DataReaderToList<T>(SqlDataReader sdr)
        {
            Type t = typeof(T);//获取类型
            //获取所有属性
            PropertyInfo[] p = t.GetProperties();
            //定义集合
            List<T> list = new List<T>();
            //遍历数据流
            while (sdr.Read())
            {
                //创建对象
                T obj = (T)Activator.CreateInstance(t);
                //数据流列数
                string[] sdrFileName = new string[sdr.FieldCount];
                for (int i = 0; i < sdr.FieldCount; i++)
                {
                    sdrFileName[i] = sdr.GetName(i).Trim();
                }
                foreach (PropertyInfo item in p)
                {
                    //判断Model中的属性是否在流的列名中
                    if (sdrFileName.ToList().IndexOf(item.Name) > -1)
                    {
                        if (sdr[item.Name] != null)
                        {
                            item.SetValue(obj, sdr[item.Name]);//对象属性赋值
                        }
                        else
                        {
                            item.SetValue(obj, null);//对象属性赋值
                        }
                    }
                    else
                    {
                        item.SetValue(obj, null);//对象属性赋值
                    }

                }
                list.Add(obj);
            }
            return list;
        }
        /// <summary>
        /// 获取list集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static List<T> GetToList<T>(string sql)
        {
            //获取流数据
            SqlDataReader sdr = GetDataReader(sql);
            List<T> list = DataReaderToList<T>(sdr);
            if (!sdr.IsClosed)//数据流关闭
            {
                sdr.Close();
            }
            return list;
        }
        /// <summary>
        /// 返回首行首列
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static object ExecuteScalar(string sql)
        {
            try
            {
                //打开
                //判断状态
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                //命令对象
                SqlCommand cmd = new SqlCommand(sql, conn);
                object n = cmd.ExecuteScalar();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
                return n;
            }
            //获取所要进行修改的行的主键 request获取页所传来的值
            //t.qdid = Convert.ToInt32(Request["qdid"]);
            catch (Exception)
            {

                throw;
            }
        }
    }

    
}
//location.href='' 用来进行跳转的页面方法
//添加请选择
//ListItem li = new ListItem("请选择", "0");
//DropDownList1.Items.Insert(0, li);

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来解答您的问题。 首先,工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而单例模式则是一种保证一个类只有一个实例的设计模式。 在 C# 中,我们可以将这两种模式结合使用来操作数据库。具体实现步骤如下: 1. 创建一个接口 IDbHelper,用于定义数据库操作的方法。 ```csharp interface IDbHelper { void Connect(); void Execute(string sql); } ``` 2. 创建一个工厂类 DbFactory,用于创建 IDbHelper 接口的实例。 ```csharp class DbFactory { private static IDbHelper instance = null; public static IDbHelper GetInstance() { if (instance == null) { instance = new SqlDbHelper(); // 这里以 SqlServer 数据库为例 } return instance; } } ``` 3. 创建一个单例类 SqlDbHelper,实现 IDbHelper 接口中的方法。 ```csharp class SqlDbHelper : IDbHelper { private static SqlDbHelper instance = null; private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDbHelper() { // 连接数据库 conn = new SqlConnection("数据库连接字符串"); conn.Open(); // 创建 Command 对象 cmd = new SqlCommand(); cmd.Connection = conn; } public static SqlDbHelper GetInstance() { if (instance == null) { instance = new SqlDbHelper(); } return instance; } public void Connect() { // 连接数据库 conn.Open(); } public void Execute(string sql) { // 执行 SQL 语句 cmd.CommandText = sql; cmd.ExecuteNonQuery(); } } ``` 4. 使用示例: ```csharp // 获取 SqlDbHelper 实例 IDbHelper dbHelper = DbFactory.GetInstance(); // 连接数据库 dbHelper.Connect(); // 执行 SQL 语句 dbHelper.Execute("SELECT * FROM user"); ``` 当我们需要操作数据库时,只需要通过工厂类获取 IDbHelper 接口的实例,然后调用其方法即可。由于 SqlDbHelper 类采用了单例模式,因此每次获取到的实例都是同一个,避免了频繁创建对象的开销,提高了程序的性能。 希望这个示例能够帮助您理解工厂模式和单例模式的使用,以及如何在 C# 中操作数据库。如果您有其他问题,欢迎随时咨询我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值