首页 > 编程语言 >C# 委托

C# 委托

时间:2023-02-09 10:22:18浏览次数:34  
标签:string 委托 C# tResult command func new conn

  public T Query<T>(int id) where T : BaseModel
        {
            Type type = typeof(T);
            string columnString = string.Join(",", type.GetProperties().Select(p => $"[{p.GetColumnName()}]"));
            string sql = $"SELECT {columnString} FROM [{type.Name}] WHERE Id=@Id";
            T t = default(T);
            DataTable dt = new DataTable();

            Func<SqlCommand, T> func = (SqlCommand command) =>//1 将要执行的先准备好
            {
                SqlParameter para = new SqlParameter("@Id", id);//3 func.invoke(command) 执行这里并返回
                command.Parameters.Add(para);
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                //SqlDataReader reader = command.ExecuteReader();
                //List<T> list = this.ReaderToList<T>(reader);
                adapter.Fill(dt);
                List<T> list = ConvertToList<T>(dt);
                T tResult = list.FirstOrDefault();
                return tResult;
            };
            t = ExcuteSql<T>(sql, func);
            return t;
        }

 private T ExcuteSql<T>(string sql, Func<SqlCommand, T> func)
        {
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                using (SqlCommand command = new SqlCommand(sql, conn))
                {
                    conn.Open();
                    SqlTransaction sqlTransaction = conn.BeginTransaction();
                    try
                    {
                        command.Transaction = sqlTransaction;
                        T tResult = func.Invoke(command);//2执行前面准备好的。
                        sqlTransaction.Commit();
                        return tResult;
                    }
                    catch (Exception ex)
                    {
                        sqlTransaction.Rollback();
                        throw;
                    }
                }
            }
        }

  

标签:string,委托,C#,tResult,command,func,new,conn
From: https://www.cnblogs.com/liujian1368928/p/17104314.html

相关文章

  • JavaScript 评测代码运行速度
    一、使用performance.now()API在JavaScript中,可以使用performance.now()API来评测代码的运行速度。该API返回当前页面的高精度时间戳,您可以在代码执行前后调用它......
  • FMC子卡设计资料:ADRV9002双窄带宽带射频收发器 AD9361双收双发射频 DA子卡 ADRV9009
    FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡   一、产品概述  ADRV9002 是一款高性能、高线性度、高动态范围收发器,旨在针对性能与功耗系......
  • C#中的异或操作
    在看一个算法题时,看到异或这种操作,平时在项目开发中在代码中用的很少,于是特意看了一下,总结如下:异或在英文中是ExclusiveOR,缩写成xor.  在C#中用^来表示异或运算......
  • C# 如何获取错误所在行数
    三种思路,一种是利用error.StackTrace,第二种是try-catch找到错误行数,第三种是:  System.Diagnostics.Debug.WriteLine()+  DebugView工具一、error.StackTrace代码......
  • 2023 年 2 月国内使用ChatGPT的方式汇总,亲测可用
    刚过完年,不知道大家有没有在春节档期间,跟家人一起观看《流浪地球2》,里面的MOSS,是一款强大的智能机器人。那么当时我们就可以联想到的最近发布的ChatGPT,同样作为一款现实中......
  • centos7 安装docker
    1、卸载老版本docker(可选)sudoyumremovedocker\docker-client\docker-client-latest\docker-common......
  • 编程口通讯协议下,三菱FX2N与MCGS能否建立无线通讯?
    三菱PLC的位元件主要有X、Y、M、S、T、C,字元件有D。编程口通信协议采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,字符为ASCII码形式。昆仑通态可使用三......
  • QT comboBox简单使用
    拖一个控件双击然后就点加号生成下拉菜单connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(deal(int)));这样就可以接收你选择的菜单信号了你可以把初始......
  • C++变参模板简单使用
    为什么简单使用呢因为目前没遇到实际应用的地方就大概学一下吧template<typenameT,typename...A>voidprint(Tt,A...a){std::cout<<t;print(a...);//这个函数是通用......
  • C# ref out两个关键字学习一下
    ref这个名字和C++的引用应该是一样的噢。功能也是传指针,好东西。out这个关键字我第一次见是在glsl里头,你给个变量,在函数执行过程赋值,保存出来,或者在着色器每个阶段结束的时......