tnblog
首页
视频
资源
登录

访问数据库的泛型封装类

3732人阅读 2020/3/9 18:17 总访问:15729 评论:0 收藏:1 手机
分类: .net


  1.         /// <summary>
  2.         /// 新增
  3.         /// </summary>
  4.         /// <typeparam name="T">实体类</typeparam>
  5.         /// <param name="t">对象</param>
  6.         /// <param name="flag">返回主键还是都影响行数  false  受影响行数  true 主键值</param>
  7.         /// <returns></returns>
  8.         public int Insert<T>(T t, bool flag = false
  9.         {
  10.             List<PropertyInfo> propertyInfos = new List<PropertyInfo>(typeof(T).GetProperties());
  11.             //获取主键
  12.             PropertyInfo pkey = propertyInfos.Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault();
  13.             propertyInfos.Remove(pkey);
  14.             StringBuilder builder = new StringBuilder();
  15.             builder.Append("insert into ").Append(typeof(T).Name).Append("(");
  16.             StringBuilder valueBuilder = new StringBuilder();
  17.             valueBuilder.Append(" values( ");
  18.             for (int i = 0; i < propertyInfos.Count; i++)
  19.             {
  20.                 PropertyInfo item = propertyInfos[i];
  21.                 if (item.GetValue(t) != null)
  22.                 {
  23.                     builder.Append(item.Name);
  24.                     valueBuilder.Append("'");
  25.                     valueBuilder.Append(item.GetValue(t));
  26.                     valueBuilder.Append("'");
  27.                     if (i < propertyInfos.Count - 1)
  28.                     {
  29.                         builder.Append(",");
  30.                         valueBuilder.Append(",");
  31.                     }
  32.                 }
  33.             }
  34.             builder.Append(" ) ");
  35.             valueBuilder.Append(" )");
  36.             if (flag)
  37.                 builder.Append(" output inserted.").Append(pkey.Name);
  38.             builder.Append(valueBuilder);
  39.             using (SqlConnection conn = new SqlConnection(_connstr))
  40.             {
  41.                 conn.Open();
  42.                 using (SqlCommand cmd = new SqlCommand(builder.ToString(), conn))
  43.                 {
  44.                     if (flag)
  45.                         return Convert.ToInt32(cmd.ExecuteScalar());//返回最新的主键
  46.                     else
  47.                         return cmd.ExecuteNonQuery();//返回受影响行数
  48.                 }
  49.             }
  50.         }
  51.         /// <summary>
  52.         /// 修改
  53.         /// </summary>
  54.         /// <typeparam name="T"></typeparam>
  55.         /// <param name="t"></param>
  56.         /// <returns></returns>
  57.         public int Update<T>(T t)
  58.         {
  59.             List<PropertyInfo> propertyInfos = new List<PropertyInfo>(typeof(T).GetProperties());
  60.             //获取主键
  61.             PropertyInfo pkey = propertyInfos.Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault();
  62.             propertyInfos.Remove(pkey);
  63.             StringBuilder builder = new StringBuilder();
  64.             builder.Append("update ").Append(typeof(T).Name).Append(" set ");
  65.             for (int i = 0; i < propertyInfos.Count; i++)
  66.             {
  67.                 PropertyInfo item = propertyInfos[i];
  68.                 if (item.GetValue(t) != null)
  69.                 {
  70.                     builder.Append(item.Name);
  71.                     builder.Append("='");
  72.                     builder.Append(item.GetValue(t));
  73.                     builder.Append("'");
  74.                     if (i < propertyInfos.Count - 1)
  75.                         builder.Append(",");
  76.                 }
  77.             }
  78.             builder.Append(" where ");
  79.             builder.Append(pkey.Name);
  80.             builder.Append("='");
  81.             builder.Append(pkey.GetValue(t));
  82.             builder.Append("'");
  83.             using (SqlConnection conn = new SqlConnection(_connstr))
  84.             {
  85.                 conn.Open();
  86.                 using (SqlCommand cmd = new SqlCommand(builder.ToString(), conn))
  87.                 {
  88.                     return cmd.ExecuteNonQuery();
  89.                 }
  90.             }
  91.         }


评价

oracle数据库中没有scott用户

使用SYS用户登录conn sys/密码 as sysdba(默认密码123456)然后找到oracle安装目录下scott.sql的这个文件然后执行命令:@+...

没有为 SQL 缓存通知启用数据库

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql -S 数据库IP -U 登录名 -P 密码 -d 数据库名称 -t 表名 -et

ado.net访问数据库的基本用法

放回datatable//1:开打数据库的连接 using(SqlConnectionconn=newSqlConnection(&quot;server=.;uid=sa;pwd=123456;databa...

多线程、Lock锁、数据库实现队列

队列其元素以先进先出(Firstin,Firstout,FIFO)的方式来处理的集合。先放入队列中的元素会先读取。队列使用System.Collect...

思宇上课笔记—SQL数据库分页查询的方式

jQuery课堂实例分页在实际开发中经常被用到,今天就来介绍下SQL数据库分页的几种常见方式。 下面的例子都以每分5条数据为一...

遍历数据库中表的T4模板

简单的案例创建文本模板ctrl+s出奇迹&lt;#@templatedebug=&quot;false&quot;hostspecific=&quot;false&quot;language=&quot...

日志是写数据库好还是文件好,以及日志策略

先来看看大佬的一句话:离开需求谈技术都是扯淡主要是看你的日志是为了只做一个存储归档,还是要把数据对统计与分析如果只...

数据库的varchar和nvarchar的区别

搞了一个上午,自己测试看懂的一点点小东西,现在记录下来....数据库的varchar和nvarchar的区别首先内存上:1--8000 1--400...

mysql数据库基础

1 数据库和表操作 2 数据操作 3 高级查询 4 mysql管理1 数据库和表操作 数据库 创建:create database 数据库名 [default ...

EF连接mysql连接mysql数据库操作中文数据乱码解决方法

修改数据库的连接字符器在连接字符器添加charset=gb2312。注意事项:(1)字符编码不支持UTF8。(2)必须使用规定编码。示例:&...

EF连接mysql数据库

注意事项准备工作(1)下载MySQL数据库软件6.6.6版本。 (2)下载MySQL数据库mysql-connector-net-6.6.6两者不一样都不能少。(...

EF操作数据库的数据迁移

Enable-Migrations启用数据库迁移。Enable-Migrations –EnableAutomaticMigrations 启动自动迁移。Update-Database 更新到...

redis使用list存储热点数据库

今天,又学啦一点新知识,redis(缓存),看到这个单词的时候想必大家都会有一种似曾相识的感觉吧准备好,我要开始讲解啦首先我...
没有个性,不需要签名
排名
72
文章
8
粉丝
3
评论
3
导出SQL脚本小程序
剑轩 : 厉害了!
导出SQL脚本小程序
剑轩 : 厉害了!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
因为刚好遇见你,原来你也在这里……