C# ORM学习笔记:Dapper基本用法
<h2> 一、基础知识</h2><h4> 1.1、Dapper简介</h4>
<p> Dapper是.NET下的一个micro ORM,它和Entity Framework或NHibnate不同,属于轻量级并且是半自动的(实体类都要自己写)。假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ORM。</p>
<h4> 1.2、Dapper优点</h4>
<p> 1)轻量。只有一个文件(SqlMapper.cs)。</p>
<p> 2)速度快。Dapper的速度接近于IDataReader,取列表的数据超过了DataTable。</p>
<p> 3)支持多种数据库。包括SQLite、SqlCe、Firebird、Oracle、MySQL、PostgreSQL、SQL Server。</p>
<p> 4)可以映射一对一、一对多、多对多等多种关系。</p>
<p> 5)性能高。通过Emit反射IDataReader的序列队列,来快速地得到和产生对象。</p>
<h4> 1.3、Dapper安装</h4>
<p> 此处使用Dapper扩展库Dapper.SimpleCRUD,它也会默认安装Dapper(依赖项):</p>
<p> 项目右键->管理 NuGet 程序包->Dapper.SimpleCRUD。</p>
<p><img src="https://img2020.cnblogs.com/blog/1227623/202004/1227623-20200427171617571-396653034.png" alt=""></p>
<h2> 二、数据准备</h2>
<h4> 2.1、数据表</h4>
<p> 在SQL Server中创建4个数据表,分别是:Student(学生表)、Teacher(教师表)、Course(课程表)、Record(成绩表)。</p>
<div class="cnblogs_code"><img id="code_img_closed_5dcdb2f9-391f-41ee-a694-8d9efa416876" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_5dcdb2f9-391f-41ee-a694-8d9efa416876" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_5dcdb2f9-391f-41ee-a694-8d9efa416876" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">学生表</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Student</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">StudentID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">INT</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 255, 1)">IDENTITY</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Name</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">NVARCHAR</span><span style="color: rgba(255, 0, 0, 1)">]</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Age</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">SMALLINT</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Gender</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">NVARCHAR</span><span style="color: rgba(255, 0, 0, 1)">]</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">10</span>) <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 0, 255, 1)">CONSTRAINT</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PK_Student</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">PRIMARY</span> <span style="color: rgba(0, 0, 255, 1)">KEY</span> <span style="color: rgba(0, 0, 255, 1)">CLUSTERED</span><span style="color: rgba(0, 0, 0, 1)">
(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">StudentID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">ASC</span><span style="color: rgba(0, 0, 0, 1)">
)</span><span style="color: rgba(0, 0, 255, 1)">WITH</span> (PAD_INDEX <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, STATISTICS_NORECOMPUTE <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, IGNORE_DUP_KEY <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, ALLOW_ROW_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>, ALLOW_PAGE_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>) <span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">
) </span><span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">教师表</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Teacher</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">TeacherID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">INT</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 255, 1)">IDENTITY</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Name</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">NVARCHAR</span><span style="color: rgba(255, 0, 0, 1)">]</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 0, 255, 1)">CONSTRAINT</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PK_Teacher</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">PRIMARY</span> <span style="color: rgba(0, 0, 255, 1)">KEY</span> <span style="color: rgba(0, 0, 255, 1)">CLUSTERED</span><span style="color: rgba(0, 0, 0, 1)">
(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">TeacherID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">ASC</span><span style="color: rgba(0, 0, 0, 1)">
)</span><span style="color: rgba(0, 0, 255, 1)">WITH</span> (PAD_INDEX <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, STATISTICS_NORECOMPUTE <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, IGNORE_DUP_KEY <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, ALLOW_ROW_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>, ALLOW_PAGE_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>) <span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">
) </span><span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">课程表</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Course</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">CourseID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">int</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 255, 1)">IDENTITY</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Name</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">nvarchar</span><span style="color: rgba(255, 0, 0, 1)">]</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">TeacherID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">int</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 0, 255, 1)">CONSTRAINT</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PK_Course</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">PRIMARY</span> <span style="color: rgba(0, 0, 255, 1)">KEY</span> <span style="color: rgba(0, 0, 255, 1)">CLUSTERED</span><span style="color: rgba(0, 0, 0, 1)">
(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">CourseID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">ASC</span><span style="color: rgba(0, 0, 0, 1)">
)</span><span style="color: rgba(0, 0, 255, 1)">WITH</span> (PAD_INDEX <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, STATISTICS_NORECOMPUTE <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, IGNORE_DUP_KEY <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, ALLOW_ROW_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>, ALLOW_PAGE_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>) <span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">
) </span><span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">成绩表</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Record</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">StudentID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">INT</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">CourseID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">INT</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">Score</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">NUMERIC</span><span style="color: rgba(255, 0, 0, 1)">]</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">8</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>) <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 0, 255, 1)">CONSTRAINT</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PK_Score</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">PRIMARY</span> <span style="color: rgba(0, 0, 255, 1)">KEY</span> <span style="color: rgba(0, 0, 255, 1)">CLUSTERED</span><span style="color: rgba(0, 0, 0, 1)">
(
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">StudentID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">ASC</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">CourseID</span><span style="color: rgba(255, 0, 0, 1)">]</span> <span style="color: rgba(0, 0, 255, 1)">ASC</span><span style="color: rgba(0, 0, 0, 1)">
)</span><span style="color: rgba(0, 0, 255, 1)">WITH</span> (PAD_INDEX <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, STATISTICS_NORECOMPUTE <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, IGNORE_DUP_KEY <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">OFF</span>, ALLOW_ROW_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>, ALLOW_PAGE_LOCKS <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">ON</span>) <span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">
) </span><span style="color: rgba(0, 0, 255, 1)">ON</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PRIMARY</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">学生表数据插入</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span><span style="color: rgba(0, 0, 0, 1)"> Student (Name,Age,Gender)
</span><span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">刘一</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">18</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">female</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">陈二</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">19</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">female</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">张三</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">18</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">male</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">李四</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">19</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">male</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">王五</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">18</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">male</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">赵六</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">19</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">male</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">孙七</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">19</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">female</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">教师表数据插入</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span><span style="color: rgba(0, 0, 0, 1)"> Teacher (Name)
</span><span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">周八</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">吴九</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">郑十</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">课程表数据插入</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span><span style="color: rgba(0, 0, 0, 1)"> Course (Name,TeacherID)
</span><span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">离散数学</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">程序设计</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">数据结构</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">成绩表数据插入</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span><span style="color: rgba(0, 0, 0, 1)"> Record (StudentID,CourseID,Score )
</span><span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">90</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">91</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">89</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">4</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">75</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">5</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">96</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">6</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">78</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">7</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">83</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">86</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">92</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">77</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">4</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">71</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">5</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">66</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">6</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">87</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">7</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">93</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">81</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">90</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">88</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">4</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">82</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">5</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">93</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">6</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">91</span>
<span style="color: rgba(0, 0, 255, 1)">UNION</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">7</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">3</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">84</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 2.2、实体类</h4>
<p> Dapper的实体映射:</p>
<p> 1)属性不编辑,用这个特性标记,默认是true。</p>
<p> 2)类名到表名的映射,用特性,TableName对应物理数据表名称。</p>
<p> 3)主键映射,如果您的实体类中有Id属性,Dapper会默认此属性为主键,否则要为作为主键的属性添加特性。</p>
<p> 由上可知,如Student表,其实体类应该生成下面这个样子:</p>
<div class="cnblogs_code"><img id="code_img_closed_9d87476a-31c8-4db2-92f4-fcf7346d86d6" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_9d87476a-31c8-4db2-92f4-fcf7346d86d6" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_9d87476a-31c8-4db2-92f4-fcf7346d86d6" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Collections.Generic;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Text;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Dapper;
</span><span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> LinkTo.Test.ConsoleDapper
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Student
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>? StudentID {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Name {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">short</span>? Age {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Gender {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 2.3、使用T4模板生成实体类</h4>
<p> 2.3.1、T4Code文件夹的文本模板</p>
<div class="cnblogs_code"><img id="code_img_closed_3322fae8-5ec0-4466-b0e7-dcb2f76f0f25" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_3322fae8-5ec0-4466-b0e7-dcb2f76f0f25" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_3322fae8-5ec0-4466-b0e7-dcb2f76f0f25" class="cnblogs_code_hide">
<pre><#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Core</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Data</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Linq</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Text</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Collections.Generic</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Data</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Data.SqlClient</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#+
<span style="color: rgba(0, 0, 255, 1)">#region</span> T4Code
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 数据库架构接口
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> IDBSchema : IDisposable
{
List</span><<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)"> GetTableList();
DataTable GetTableMetadata(</span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> tableName);
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 数据库架构工厂
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> DBSchemaFactory
{
</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span> <span style="color: rgba(0, 0, 255, 1)">string</span> DatabaseType = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SqlServer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> IDBSchema GetDBSchema()
{
IDBSchema dbSchema;
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (DatabaseType)
{
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SqlServer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
{
dbSchema </span>=<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlServerSchema();
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
{
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> ArgumentException(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">The input argument of DatabaseType is invalid.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dbSchema;
}
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> SqlServer
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> SqlServerSchema : IDBSchema
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> ConnectionString = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Server=.;Database=Test;Uid=sa;Pwd=********;</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> SqlConnection conn;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> SqlServerSchema()
{
conn </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlConnection(ConnectionString);
conn.Open();
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> List<<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)"> GetTableList()
{
List</span><<span style="color: rgba(0, 0, 255, 1)">string</span>> list = <span style="color: rgba(0, 0, 255, 1)">new</span> List<<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> commandText = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT NAME TABLE_NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">using</span>(SqlCommand cmd = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlCommand(commandText, conn))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (SqlDataReader dr =<span style="color: rgba(0, 0, 0, 1)"> cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
</span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (dr.Read())
{
list.Add(dr[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TABLE_NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString());
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> DataTable GetTableMetadata(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> tableName)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> commandText=<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Format
(
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT A.NAME TABLE_NAME,B.NAME FIELD_NAME,C.NAME DATATYPE,ISNULL(B.PREC,0) LENGTH, </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CONVERT(BIT,CASE WHEN NOT F.ID IS NULL THEN 1 ELSE 0 END) ISKEY, </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CONVERT(BIT,CASE WHEN COLUMNPROPERTY(B.ID,B.NAME,'ISIDENTITY') = 1 THEN 1 ELSE 0 END) AS ISIDENTITY, </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CONVERT(BIT,B.ISNULLABLE) ISNULLABLE </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FROM SYSOBJECTS A INNER JOIN SYSCOLUMNS B ON A.ID=B.ID INNER JOIN SYSTYPES C ON B.XTYPE=C.XUSERTYPE </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">LEFT JOIN SYSOBJECTS D ON B.ID=D.PARENT_OBJ AND D.XTYPE='PK' </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">LEFT JOIN SYSINDEXES E ON B.ID=E.ID AND D.NAME=E.NAME </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">LEFT JOIN SYSINDEXKEYS F ON B.ID=F.ID AND B.COLID=F.COLID AND E.INDID=F.INDID </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WHERE A.XTYPE='U' AND A.NAME='{0}' </span><span style="color: rgba(128, 0, 0, 1)">"</span>+
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ORDER BY A.NAME,B.COLORDER</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, tableName
);
</span><span style="color: rgba(0, 0, 255, 1)">using</span>(SqlCommand cmd = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlCommand(commandText, conn))
{
SqlDataAdapter da </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlDataAdapter(cmd);
DataSet ds </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DataSet();
da.Fill(ds,</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Schema</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> ds.Tables[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
}
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Dispose()
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (conn != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
{
conn.Close();
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)">#endregion</span><span style="color: rgba(0, 0, 0, 1)">
#</span>></pre>
</div>
<span class="cnblogs_code_collapse">DBSchema.ttinclude</span></div>
<div class="cnblogs_code"><img id="code_img_closed_9122ab4b-554a-49cd-bc61-cd6a150d1240" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_9122ab4b-554a-49cd-bc61-cd6a150d1240" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_9122ab4b-554a-49cd-bc61-cd6a150d1240" class="cnblogs_code_hide">
<pre><#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Core</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Data</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EnvDTE</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Linq</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Text</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Collections.Generic</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Data</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.IO</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Microsoft.VisualStudio.TextTemplating</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#+
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> T4 Template Block manager for handling multiple file outputs more easily.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Copyright (c) Microsoft Corporation.All rights reserved.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This source code is made available under the terms of the Microsoft Public License (MS-PL)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Manager class records the various blocks so it can split them up</span>
<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Manager
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">struct</span><span style="color: rgba(0, 0, 0, 1)"> Block
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Name;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> Start, Length;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> List<Block> blocks = <span style="color: rgba(0, 0, 255, 1)">new</span> List<Block><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Block currentBlock;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> Block footerBlock = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Block();
</span><span style="color: rgba(0, 0, 255, 1)">public</span> Block headerBlock = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Block();
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> ITextTemplatingEngineHost host;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy strategy;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> StringBuilder template;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> OutputPath { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 0, 255, 1)">public</span> Manager(ITextTemplatingEngineHost host, StringBuilder template, <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> commonHeader)
{
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.host =<span style="color: rgba(0, 0, 0, 1)"> host;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.template =<span style="color: rgba(0, 0, 0, 1)"> template;
OutputPath </span>= <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty;
strategy </span>=<span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy.Create(host);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> StartBlock(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> name)
{
currentBlock </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Block { Name = name, Start =<span style="color: rgba(0, 0, 0, 1)"> template.Length };
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> StartFooter()
{
footerBlock.Start </span>=<span style="color: rgba(0, 0, 0, 1)"> template.Length;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> EndFooter()
{
footerBlock.Length </span>= template.Length -<span style="color: rgba(0, 0, 0, 1)"> footerBlock.Start;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> StartHeader()
{
headerBlock.Start </span>=<span style="color: rgba(0, 0, 0, 1)"> template.Length;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> EndHeader()
{
headerBlock.Length </span>= template.Length -<span style="color: rgba(0, 0, 0, 1)"> headerBlock.Start;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> EndBlock()
{
currentBlock.Length </span>= template.Length -<span style="color: rgba(0, 0, 0, 1)"> currentBlock.Start;
blocks.Add(currentBlock);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Process(<span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> split)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> header =<span style="color: rgba(0, 0, 0, 1)"> template.ToString(headerBlock.Start, headerBlock.Length);
</span><span style="color: rgba(0, 0, 255, 1)">string</span> footer =<span style="color: rgba(0, 0, 0, 1)"> template.ToString(footerBlock.Start, footerBlock.Length);
blocks.Reverse();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span>(Block block <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> blocks) {
</span><span style="color: rgba(0, 0, 255, 1)">string</span> fileName =<span style="color: rgba(0, 0, 0, 1)"> Path.Combine(OutputPath, block.Name);
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (split) {
</span><span style="color: rgba(0, 0, 255, 1)">string</span> content = header + template.ToString(block.Start, block.Length) +<span style="color: rgba(0, 0, 0, 1)"> footer;
strategy.CreateFile(fileName, content);
template.Remove(block.Start, block.Length);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
strategy.DeleteFile(fileName);
}
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy
{
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy Create(ITextTemplatingEngineHost host)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> (host <span style="color: rgba(0, 0, 255, 1)">is</span> IServiceProvider) ? <span style="color: rgba(0, 0, 255, 1)">new</span> VSManagementStrategy(host) : <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy(host);
}
</span><span style="color: rgba(0, 0, 255, 1)">internal</span><span style="color: rgba(0, 0, 0, 1)"> ManagementStrategy(ITextTemplatingEngineHost host) { }
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">virtual</span> <span style="color: rgba(0, 0, 255, 1)">void</span> CreateFile(<span style="color: rgba(0, 0, 255, 1)">string</span> fileName, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> content)
{
File.WriteAllText(fileName, content);
}
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">virtual</span> <span style="color: rgba(0, 0, 255, 1)">void</span> DeleteFile(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> fileName)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (File.Exists(fileName))
File.Delete(fileName);
}
}
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> VSManagementStrategy : ManagementStrategy
{
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> EnvDTE.ProjectItem templateProjectItem;
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> VSManagementStrategy(ITextTemplatingEngineHost host) : <span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">(host)
{
IServiceProvider hostServiceProvider </span>=<span style="color: rgba(0, 0, 0, 1)"> (IServiceProvider)host;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (hostServiceProvider == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> ArgumentNullException(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Could not obtain hostServiceProvider</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
EnvDTE.DTE dte </span>= (EnvDTE.DTE)hostServiceProvider.GetService(<span style="color: rgba(0, 0, 255, 1)">typeof</span><span style="color: rgba(0, 0, 0, 1)">(EnvDTE.DTE));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (dte == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> ArgumentNullException(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Could not obtain DTE from host</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
templateProjectItem </span>=<span style="color: rgba(0, 0, 0, 1)"> dte.Solution.FindProjectItem(host.TemplateFile);
}
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span> CreateFile(<span style="color: rgba(0, 0, 255, 1)">string</span> fileName, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> content)
{
</span><span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">.CreateFile(fileName, content);
((EventHandler)</span><span style="color: rgba(0, 0, 255, 1)">delegate</span> { templateProjectItem.ProjectItems.AddFromFile(fileName); }).BeginInvoke(<span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span> DeleteFile(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> fileName)
{
((EventHandler)</span><span style="color: rgba(0, 0, 255, 1)">delegate</span> { FindAndDeleteFile(fileName); }).BeginInvoke(<span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> FindAndDeleteFile(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> fileName)
{
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span>(EnvDTE.ProjectItem projectItem <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> templateProjectItem.ProjectItems)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (projectItem.get_FileNames(<span style="color: rgba(128, 0, 128, 1)">0</span>) ==<span style="color: rgba(0, 0, 0, 1)"> fileName)
{
projectItem.Delete();
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
}
}
#</span>></pre>
</div>
<span class="cnblogs_code_collapse">MultiDocument.ttinclude</span></div>
<p> DBSchema.ttinclude主要实现了数据库工厂的功能。注:请将数据库连接字符串改成您自己的。</p>
<p> MultiDocument.ttinclude主要实现了多文档的功能。</p>
<p> 2.3.2、生成实体类的文本模板</p>
<div class="cnblogs_code"><img id="code_img_closed_cedeb17a-0f6a-49fc-9ebd-8217774a12ca" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_cedeb17a-0f6a-49fc-9ebd-8217774a12ca" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_cedeb17a-0f6a-49fc-9ebd-8217774a12ca" class="cnblogs_code_hide">
<pre><#@ template debug=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span> hostspecific=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span> language=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C#</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ assembly name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Core</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Linq</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Text</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ import <span style="color: rgba(0, 0, 255, 1)">namespace</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Collections.Generic</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ output extension=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.cs</span><span style="color: rgba(128, 0, 0, 1)">"</span> #>
<#@ include file=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">T4Code/DBSchema.ttinclude</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<#@ include file=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">T4Code/MultiDocument.ttinclude</span><span style="color: rgba(128, 0, 0, 1)">"</span>#>
<# <span style="color: rgba(0, 0, 255, 1)">var</span> manager = <span style="color: rgba(0, 0, 255, 1)">new</span> Manager(Host, GenerationEnvironment, <span style="color: rgba(0, 0, 255, 1)">true</span>) { OutputPath = Path.GetDirectoryName(Host.TemplateFile)}; #>
<<span style="color: rgba(0, 0, 0, 1)">#
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">System.Diagnostics.Debugger.Launch();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">调试</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> dbSchema =<span style="color: rgba(0, 0, 0, 1)"> DBSchemaFactory.GetDBSchema();
List</span><<span style="color: rgba(0, 0, 255, 1)">string</span>> tableList =<span style="color: rgba(0, 0, 0, 1)"> dbSchema.GetTableList();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">string</span> tableName <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> tableList)
{
manager.StartBlock(tableName</span>+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.cs</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
DataTable table </span>=<span style="color: rgba(0, 0, 0, 1)"> dbSchema.GetTableMetadata(tableName);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取主键</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> strKey = <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty;
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (DataRow dataRow <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> table.Rows)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(0, 0, 255, 1)">bool</span>)dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISKEY</span><span style="color: rgba(128, 0, 0, 1)">"</span>] == <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">)
{
strKey </span>= dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FIELD_NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString();
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
#</span>>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">-------------------------------------------------------------------------------
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此代码由T4模板MultiModelAuto自动生成
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 生成时间 <#= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") #>
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">-------------------------------------------------------------------------------</span>
<span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Collections.Generic;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Text;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Dapper;
</span><span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> LinkTo.Test.ConsoleDapper
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> <#= tableName #><span style="color: rgba(0, 0, 0, 1)">
{
</span><<span style="color: rgba(0, 0, 0, 1)">#
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (DataRow dataRow <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> table.Rows)
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取数据类型</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> dbDataType = dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DATATYPE</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> dataType = <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty;
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (dbDataType)
{
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">decimal</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">numeric</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">money</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">smallmoney</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">decimal?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">char</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nchar</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">varchar</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nvarchar</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ntext</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">string</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">uniqueidentifier</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Guid?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bit</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bool?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">real</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Single?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bigint</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">long?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">int</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">int?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tinyint</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">smallint</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">short?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">float</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">float?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">date</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datetime</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datetime2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">smalldatetime</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DateTime?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datetimeoffset </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DateTimeOffset?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">timeSpan </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TimeSpan?</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">binary</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">varbinary</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
dataType </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">byte[]</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FIELD_NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span>].ToString() ==<span style="color: rgba(0, 0, 0, 1)"> strKey)
{
#</span>><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <#= dataType #> <#= dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FIELD_NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span>].ToString() #> {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
</span><<span style="color: rgba(0, 0, 0, 1)">#
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
{
#</span>>
<span style="color: rgba(0, 0, 255, 1)">public</span> <#= dataType #> <#= dataRow[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FIELD_NAME</span><span style="color: rgba(128, 0, 0, 1)">"</span>].ToString() #> {<span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">;}
</span><<span style="color: rgba(0, 0, 0, 1)">#
}
}
#</span>><span style="color: rgba(0, 0, 0, 1)">
}
}
</span><<span style="color: rgba(0, 0, 0, 1)">#
manager.EndBlock();
}
dbSchema.Dispose();
manager.Process(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
#</span>></pre>
</div>
<span class="cnblogs_code_collapse">MultiModelAuto.tt</span></div>
<h2> 三、CRUD</h2>
<h4> 3.1、connectionStrings</h4>
<p> 在App.config中添加数据库连接字符串:</p>
<div class="cnblogs_code"><img id="code_img_closed_0eede381-70bf-4fd6-aca0-aedb8b0c2081" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_0eede381-70bf-4fd6-aca0-aedb8b0c2081" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_0eede381-70bf-4fd6-aca0-aedb8b0c2081" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="utf-8" </span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">configuration</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">startup</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">supportedRuntime </span><span style="color: rgba(255, 0, 0, 1)">version</span><span style="color: rgba(0, 0, 255, 1)">="v4.0"</span><span style="color: rgba(255, 0, 0, 1)"> sku</span><span style="color: rgba(0, 0, 255, 1)">=".NETFramework,Version=v4.6.1"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">startup</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">connectionStrings</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">add </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="connString"</span><span style="color: rgba(255, 0, 0, 1)"> connectionString</span><span style="color: rgba(0, 0, 255, 1)">="Server=.;Database=Test;Uid=sa;Pwd=********;"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">connectionStrings</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">configuration</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> 添加一个DapperHelper类,实现数据库连接及后续的CRUD。</p>
<div class="cnblogs_code"><img id="code_img_closed_8ec698fd-698a-4d1a-9cc4-a1e111ee1729" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_8ec698fd-698a-4d1a-9cc4-a1e111ee1729" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_8ec698fd-698a-4d1a-9cc4-a1e111ee1729" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Collections.Generic;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Configuration;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Data;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Data.SqlClient;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Linq;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Text;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Threading.Tasks;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Dapper;
</span><span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> LinkTo.Test.ConsoleDapper
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> DapperHelper
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> IDbConnection Connection = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> ConnectionString = ConfigurationManager.ConnectionStrings[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">connString</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ConnectionString;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> DapperHelper()
{ }
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> IDbConnection GetCon()
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (Connection == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
{
Connection </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlConnection(ConnectionString);
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (Connection.State ==<span style="color: rgba(0, 0, 0, 1)"> ConnectionState.Closed)
{
Connection.ConnectionString </span>=<span style="color: rgba(0, 0, 0, 1)"> ConnectionString;
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (Connection.State ==<span style="color: rgba(0, 0, 0, 1)"> ConnectionState.Broken)
{
Connection.Close();
Connection.ConnectionString </span>=<span style="color: rgba(0, 0, 0, 1)"> ConnectionString;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Connection;
}
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 3.2、Create</h4>
<p> a1)通过SQL插入单条数据(带参数),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_99ee0dc5-11ee-4079-a411-57bdf6505ab8" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_99ee0dc5-11ee-4079-a411-57bdf6505ab8" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_99ee0dc5-11ee-4079-a411-57bdf6505ab8" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL插入单条数据(带参数),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> InsertWithSqlA()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO Student (Name,Age,Gender) VALUES (@Name,@Age,@Gender)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Execute(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Age = <span style="color: rgba(128, 0, 128, 1)">18</span>, Gender = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> });
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a2)通过SQL插入单条数据(带实体),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_2c6d7d11-82e4-4cfd-a150-2fa2add7acec" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_2c6d7d11-82e4-4cfd-a150-2fa2add7acec" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_2c6d7d11-82e4-4cfd-a150-2fa2add7acec" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL插入单条数据(带实体),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> InsertWithSqlB()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO Student (Name,Age,Gender) VALUES (@Name,@Age,@Gender)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
Student student </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Student
{
Name </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Age </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">,
Gender </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
};
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Execute(strSql, student);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a3)通过SQL插入单条数据(带实体),返回主键值。</p>
<div class="cnblogs_code"><img id="code_img_closed_c22c0b8b-1df7-4024-9ae8-e6f5a02fc826" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_c22c0b8b-1df7-4024-9ae8-e6f5a02fc826" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_c22c0b8b-1df7-4024-9ae8-e6f5a02fc826" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL插入单条数据(带实体),返回主键值。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> InsertWithSqlC()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO Student (Name,Age,Gender) VALUES (@Name,@Age,@Gender)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
Student student </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Student
{
Name </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Age </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">,
Gender </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
};
strSql </span>+= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> SELECT SCOPE_IDENTITY()</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.QueryFirstOrDefault<<span style="color: rgba(0, 0, 255, 1)">int</span>><span style="color: rgba(0, 0, 0, 1)">(strSql, student);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a4)通过SQL插入多条数据(带实体),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_6ccd1631-0999-4451-b607-ea96ff176e92" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_6ccd1631-0999-4451-b607-ea96ff176e92" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_6ccd1631-0999-4451-b607-ea96ff176e92" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL插入多条数据(带实体),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> InsertWithSqlD()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO Student (Name,Age,Gender) VALUES (@Name,@Age,@Gender)</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
List</span><Student> list = <span style="color: rgba(0, 0, 255, 1)">new</span> List<Student><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i < <span style="color: rgba(128, 0, 128, 1)">3</span>; i++<span style="color: rgba(0, 0, 0, 1)">)
{
Student student </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Student
{
Name </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">World</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> i.ToString(),
Age </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">,
Gender </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
};
list.Add(student);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Execute(strSql, list);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b)通过实体插入数据,返回结果是主键值。</p>
<div class="cnblogs_code"><img id="code_img_closed_998a4723-103e-4b4d-a9a0-4e9fc45eabab" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_998a4723-103e-4b4d-a9a0-4e9fc45eabab" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_998a4723-103e-4b4d-a9a0-4e9fc45eabab" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体插入数据,返回结果是主键值。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> InsertWithEntity()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> entity = <span style="color: rgba(0, 0, 255, 1)">new</span> Student { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">World</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Age = <span style="color: rgba(128, 0, 128, 1)">18</span>, Gender = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Insert(entity);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 3.3、Read</h4>
<p> a1)通过SQL查询数据(查询所有数据)</p>
<div class="cnblogs_code"><img id="code_img_closed_fda2b635-3aba-451c-9523-950f17c54f71" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_fda2b635-3aba-451c-9523-950f17c54f71" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_fda2b635-3aba-451c-9523-950f17c54f71" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL查询数据(查询所有数据)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> IEnumerable<Student><span style="color: rgba(0, 0, 0, 1)"> GetStudentList1()
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Student</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<Student><span style="color: rgba(0, 0, 0, 1)">(strSql);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a2)通过SQL查询数据(带参数)</p>
<div class="cnblogs_code"><img id="code_img_closed_93c01bda-8bbf-4bf0-92c8-e78737be44cb" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_93c01bda-8bbf-4bf0-92c8-e78737be44cb" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_93c01bda-8bbf-4bf0-92c8-e78737be44cb" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL查询数据(带参数)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="studentID"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Student GetStudentList1A(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> studentID)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Student WHERE StudentID=@StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<Student>(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { StudentID =<span style="color: rgba(0, 0, 0, 1)"> studentID }).FirstOrDefault();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a3)通过SQL查询数据(IN)</p>
<div class="cnblogs_code"><img id="code_img_closed_c8d079d0-f426-4adc-8a48-88e98fdccf10" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_c8d079d0-f426-4adc-8a48-88e98fdccf10" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_c8d079d0-f426-4adc-8a48-88e98fdccf10" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL查询数据(IN)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="studentID"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> IEnumerable<Student> GetStudentList1B(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> studentID)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Student WHERE StudentID IN @StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> idArr = studentID.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<Student>(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { StudentID =<span style="color: rgba(0, 0, 0, 1)"> idArr });
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b1)通过实体查询数据(查询所有数据)</p>
<div class="cnblogs_code"><img id="code_img_closed_0b8007fe-e51d-410d-9a9f-7241a5025682" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_0b8007fe-e51d-410d-9a9f-7241a5025682" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_0b8007fe-e51d-410d-9a9f-7241a5025682" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体询数据(查询所有数据)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> IEnumerable<Student><span style="color: rgba(0, 0, 0, 1)"> GetStudentList2()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.GetList<Student><span style="color: rgba(0, 0, 0, 1)">();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b2)通过实体查询数据(指定ID)</p>
<div class="cnblogs_code"><img id="code_img_closed_cd9c177e-b7f8-461e-ae87-11fa30153925" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_cd9c177e-b7f8-461e-ae87-11fa30153925" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_cd9c177e-b7f8-461e-ae87-11fa30153925" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体询数据(指定ID)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="studentID"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Student GetStudentList2A(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> studentID)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Get<Student><span style="color: rgba(0, 0, 0, 1)">(studentID);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b3)通过实体查询数据(带参数)</p>
<div class="cnblogs_code"><img id="code_img_closed_2def2f5a-70c8-482a-a933-96ad365abe0d" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_2def2f5a-70c8-482a-a933-96ad365abe0d" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_2def2f5a-70c8-482a-a933-96ad365abe0d" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体询数据(带参数)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="studentID"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Student GetStudentList2B(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> studentID)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.GetList<Student>(<span style="color: rgba(0, 0, 255, 1)">new</span> { StudentID =<span style="color: rgba(0, 0, 0, 1)"> studentID }).FirstOrDefault();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> c1)多表查询(QueryMultiple),主要操作:通过QueryMultiple方法,返回查询中每条SQL语句的数据集合。</p>
<div class="cnblogs_code"><img id="code_img_closed_d02138c6-7a9b-48db-80bd-0b5d41bc7aa0" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_d02138c6-7a9b-48db-80bd-0b5d41bc7aa0" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_d02138c6-7a9b-48db-80bd-0b5d41bc7aa0" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 多表查询(QueryMultiple)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> GetMultiEntityA()
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Student AS A;SELECT * FROM Teacher AS A</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
StringBuilder sbStudent </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuilder();
StringBuilder sbTeacher </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuilder();
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> grid =<span style="color: rgba(0, 0, 0, 1)"> conn.QueryMultiple(strSql);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> students = grid.Read<Student><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> teachers = grid.Read<Teacher><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> students)
{
sbStudent.Append($</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">StudentID={item.StudentID} Name={item.Name} Age={item.Age} Gender={item.Gender}\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> teachers)
{
sbTeacher.Append($</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TeacherID={item.TeacherID} Name={item.Name}\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> sbStudent.ToString() +<span style="color: rgba(0, 0, 0, 1)"> sbTeacher.ToString();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> c2)多表查询(Query),主要操作:通过SQL进行多表关联查询,返回查询结果的数据集合。</p>
<div class="cnblogs_code"><img id="code_img_closed_011a1d9c-033b-475e-b3a6-65f9c45b7001" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_011a1d9c-033b-475e-b3a6-65f9c45b7001" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_011a1d9c-033b-475e-b3a6-65f9c45b7001" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 多表查询(Query)
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> GetMultiEntityB()
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT A.Name CourseName,B.Name TeacherName FROM Course A INNER JOIN Teacher B ON A.TeacherID=B.TeacherID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
StringBuilder sbResult </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuilder();
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> query =<span style="color: rgba(0, 0, 0, 1)"> conn.Query(strSql);
query.AsList().ForEach(q </span>=><span style="color: rgba(0, 0, 0, 1)">
{
sbResult.Append($</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CourseName={q.CourseName} TeacherName={q.TeacherName}\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
});
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sbResult.ToString();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 3.4、Update</h4>
<p> a1)通过SQL更新数据(带参数),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_6bb0a2f8-5f24-461b-84db-c079ef05f910" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_6bb0a2f8-5f24-461b-84db-c079ef05f910" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_6bb0a2f8-5f24-461b-84db-c079ef05f910" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL更新数据(带参数),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> UpdateWithSqlA()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UPDATE Student SET Name=@Name,Age=@Age,Gender=@Gender WHERE StudentID=@StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Execute(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">World3</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Age = <span style="color: rgba(128, 0, 128, 1)">19</span>, Gender = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">female</span><span style="color: rgba(128, 0, 0, 1)">"</span>, StudentID = <span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)"> });
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> a2)通过SQL插入单条数据(带实体),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_002f2299-27e3-45af-a402-7ded8120f507" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_002f2299-27e3-45af-a402-7ded8120f507" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_002f2299-27e3-45af-a402-7ded8120f507" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL更新数据(带实体),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> UpdateWithSqlB()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UPDATE Student SET Name=@Name,Age=@Age,Gender=@Gender WHERE StudentID=@StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
Student student </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Student
{
StudentID </span>= <span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)">,
Name </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">World3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Age </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">,
Gender </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
};
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Execute(strSql, student);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b)通过实体更新数据,返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_a7c60c63-8e69-4aaf-93a5-7d23870bb7d3" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_a7c60c63-8e69-4aaf-93a5-7d23870bb7d3" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_a7c60c63-8e69-4aaf-93a5-7d23870bb7d3" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体更新数据,返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> UpdateWithEntity()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> entity = <span style="color: rgba(0, 0, 255, 1)">new</span> Student { StudentID = <span style="color: rgba(128, 0, 128, 1)">17</span>, Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">World4</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Age = <span style="color: rgba(128, 0, 128, 1)">18</span>, Gender = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Update(entity);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h4> 3.5、Delete</h4>
<p> a)通过SQL删除数据(带参数),返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_a835ff88-c235-4d7b-9b96-37a34bffe6ec" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_a835ff88-c235-4d7b-9b96-37a34bffe6ec" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_a835ff88-c235-4d7b-9b96-37a34bffe6ec" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过SQL删除数据(带参数),返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> DeleteWithSql()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DELETE FROM Student WHERE StudentID=@StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Execute(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { StudentID = <span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)"> });
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> b)通过实体删除数据,返回结果是影响行数。</p>
<div class="cnblogs_code"><img id="code_img_closed_ab958955-a875-4af0-b49e-ad07b9d66e24" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_ab958955-a875-4af0-b49e-ad07b9d66e24" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_ab958955-a875-4af0-b49e-ad07b9d66e24" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通过实体删除数据,返回结果是影响行数。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span>?<span style="color: rgba(0, 0, 0, 1)"> DeleteWithEntity()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> entity = <span style="color: rgba(0, 0, 255, 1)">new</span> Student { StudentID = <span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> conn.Delete(entity);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2> 四、Procedure</h2>
<p> 4.1、带输出参数的存储过程</p>
<div class="cnblogs_code"><img id="code_img_closed_a7f6e35e-56c6-4cca-a630-dbd0ee1b4db5" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_a7f6e35e-56c6-4cca-a630-dbd0ee1b4db5" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_a7f6e35e-56c6-4cca-a630-dbd0ee1b4db5" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">PROCEDURE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">GetStudentAge</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 0, 1)">@StudentID</span> <span style="color: rgba(0, 0, 255, 1)">INT</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">@Name</span> <span style="color: rgba(0, 0, 255, 1)">NVARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span><span style="color: rgba(0, 0, 0, 1)">) OUTPUT
</span><span style="color: rgba(0, 0, 255, 1)">AS</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span>
<span style="color: rgba(0, 0, 255, 1)">DECLARE</span> <span style="color: rgba(0, 128, 0, 1)">@Age</span> <span style="color: rgba(0, 0, 255, 1)">SMALLINT</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(0, 128, 0, 1)">@Name</span><span style="color: rgba(128, 128, 128, 1)">=</span>Name,<span style="color: rgba(0, 128, 0, 1)">@Age</span><span style="color: rgba(128, 128, 128, 1)">=</span>Age <span style="color: rgba(0, 0, 255, 1)">FROM</span> Student <span style="color: rgba(0, 0, 255, 1)">WHERE</span> StudentID<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@StudentID</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(0, 128, 0, 1)">@Age</span>
<span style="color: rgba(0, 0, 255, 1)">END</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<div class="cnblogs_code"><img id="code_img_closed_54d8587d-37d2-460b-a794-9ac1ce6095ff" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_54d8587d-37d2-460b-a794-9ac1ce6095ff" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_54d8587d-37d2-460b-a794-9ac1ce6095ff" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 带输出参数的存储过程
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="studentID"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Tuple<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">int</span>> GetStudentAge(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> studentID)
{
</span><span style="color: rgba(0, 0, 255, 1)">int</span> age = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> para = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DynamicParameters();
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">StudentID</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Name</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.Empty, DbType.String, ParameterDirection.Output);
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
age </span>= conn.Query<<span style="color: rgba(0, 0, 255, 1)">int</span>>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">GetStudentAge</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, para, commandType: CommandType.StoredProcedure).FirstOrDefault();
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> Tuple.Create(para.Get<<span style="color: rgba(0, 0, 255, 1)">string</span>>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Name</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">), age);
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span> </div>
<h2> 五、Transaction</h2>
<p> 5.1、在IDbConnection下事务,主要操作:在执行Insert方法时传入Transaction;在正常情况下Commit事务;在异常时回滚事务。</p>
<div class="cnblogs_code"><img id="code_img_closed_cd6d45b9-d45f-4548-b071-aa0580bfb0fe" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_cd6d45b9-d45f-4548-b071-aa0580bfb0fe" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_cd6d45b9-d45f-4548-b071-aa0580bfb0fe" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 在IDbConnection下事务
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> InsertWithTran()
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">int</span> studentID = <span style="color: rgba(128, 0, 128, 1)">0</span>, teacherID = <span style="color: rgba(128, 0, 128, 1)">0</span>, result = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> student = <span style="color: rgba(0, 0, 255, 1)">new</span> Student { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Sandy</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Age = <span style="color: rgba(128, 0, 128, 1)">18</span>, Gender = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">female</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 0, 255, 1)">var</span> teacher = <span style="color: rgba(0, 0, 255, 1)">new</span> Teacher { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Luci</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 0, 255, 1)">var</span> tran =<span style="color: rgba(0, 0, 0, 1)"> conn.BeginTransaction();
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
{
studentID </span>=<span style="color: rgba(0, 0, 0, 1)"> conn.Insert(student, tran).Value;
result</span>++<span style="color: rgba(0, 0, 0, 1)">;
teacherID </span>=<span style="color: rgba(0, 0, 0, 1)"> conn.Insert(teacher, tran).Value;
result</span>++<span style="color: rgba(0, 0, 0, 1)">;
tran.Commit();
}
</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">
{
result </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
tran.Rollback();
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> result > <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> 5.2、在存储过程下事务,主要操作:在存储过程中进行事务;通过DynamicParameters传递参数给存储过程;通过Query调用存储过程。</p>
<div class="cnblogs_code"><img id="code_img_closed_581e2e7b-c345-41d8-b37b-eedb01be9415" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_581e2e7b-c345-41d8-b37b-eedb01be9415" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_581e2e7b-c345-41d8-b37b-eedb01be9415" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">PROCEDURE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">InsertData</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">Student</span>
<span style="color: rgba(0, 128, 0, 1)">@StudentName</span> <span style="color: rgba(0, 0, 255, 1)">NVARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span><span style="color: rgba(0, 0, 0, 1)">),
</span><span style="color: rgba(0, 128, 0, 1)">@Age</span> <span style="color: rgba(0, 0, 255, 1)">SMALLINT</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">@Gender</span> <span style="color: rgba(0, 0, 255, 1)">NVARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">10</span><span style="color: rgba(0, 0, 0, 1)">),
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">Teacher</span>
<span style="color: rgba(0, 128, 0, 1)">@TeacherName</span> <span style="color: rgba(0, 0, 255, 1)">NVARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">AS</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">变量定义</span>
<span style="color: rgba(0, 0, 255, 1)">DECLARE</span> <span style="color: rgba(0, 128, 0, 1)">@Result</span> <span style="color: rgba(0, 0, 255, 1)">BIT</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span> <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">结果标识</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">事务开始</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span> <span style="color: rgba(0, 0, 255, 1)">TRANSACTION</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">数据插入</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span> Student (Name,Age,Gender) <span style="color: rgba(0, 0, 255, 1)">VALUES</span> (<span style="color: rgba(0, 128, 0, 1)">@StudentName</span>,<span style="color: rgba(0, 128, 0, 1)">@Age</span>,<span style="color: rgba(0, 128, 0, 1)">@Gender</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span> Teacher (Name) <span style="color: rgba(0, 0, 255, 1)">VALUES</span> (<span style="color: rgba(0, 128, 0, 1)">@TeacherName</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">事务执行</span>
<span style="color: rgba(0, 0, 255, 1)">IF</span> <span style="color: rgba(0, 128, 0, 1); font-weight: bold">@@ERROR</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span>
<span style="color: rgba(0, 0, 255, 1)">COMMIT</span> <span style="color: rgba(0, 0, 255, 1)">TRANSACTION</span>
<span style="color: rgba(0, 0, 255, 1)">END</span>
<span style="color: rgba(0, 0, 255, 1)">ELSE</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@Result</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>
<span style="color: rgba(0, 0, 255, 1)">ROLLBACK</span> <span style="color: rgba(0, 0, 255, 1)">TRANSACTION</span>
<span style="color: rgba(0, 0, 255, 1)">END</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">结果返回</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(0, 128, 0, 1)">@Result</span>
<span style="color: rgba(0, 0, 255, 1)">END</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<div class="cnblogs_code"><img id="code_img_closed_46e499b9-cf10-4d12-add3-61c0b775a7a1" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_46e499b9-cf10-4d12-add3-61c0b775a7a1" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_46e499b9-cf10-4d12-add3-61c0b775a7a1" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 在存储过程下事务
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> InsertWithProcTran()
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> para = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DynamicParameters();
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">StudentName</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hanmeimei</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Age</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Gender</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">female</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TeacherName</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Angel</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<<span style="color: rgba(0, 0, 255, 1)">bool</span>>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">InsertData</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, para, commandType: CommandType.StoredProcedure).FirstOrDefault();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2> 六、Paging</h2>
<p> 6.1、简单分页</p>
<div class="cnblogs_code"><img id="code_img_closed_42f013ac-475b-4e9e-8c1c-7beb83e2b3d8" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_42f013ac-475b-4e9e-8c1c-7beb83e2b3d8" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_42f013ac-475b-4e9e-8c1c-7beb83e2b3d8" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 简单分页
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="beginRowNum"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="endRowNum"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> IEnumerable<Student> GetPaging(<span style="color: rgba(0, 0, 255, 1)">int</span> beginRowNum = <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(0, 0, 255, 1)">int</span> endRowNum = <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> strSql =
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">( </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.StudentID) RowNum </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FROM Student AS A </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">) B </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WHERE B.RowNum BETWEEN @BeginRowNum AND @EndRowNum </span><span style="color: rgba(128, 0, 0, 1)">"</span> +
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ORDER BY B.RowNum </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<Student>(strSql, <span style="color: rgba(0, 0, 255, 1)">new</span> { BeginRowNum = beginRowNum, EndRowNum =<span style="color: rgba(0, 0, 0, 1)"> endRowNum });
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> 6.2、通用分页</p>
<div class="cnblogs_code"><img id="code_img_closed_f0cf893c-8bbe-4003-95cd-41a02feeaed5" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_f0cf893c-8bbe-4003-95cd-41a02feeaed5" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_f0cf893c-8bbe-4003-95cd-41a02feeaed5" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">PROCEDURE</span> <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">dbo</span><span style="color: rgba(255, 0, 0, 1)">]</span>.<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">PageList</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 128, 0, 1)">@TableName</span> <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">200</span>), <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">表名</span>
<span style="color: rgba(0, 128, 0, 1)">@FieldName</span> <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span>) <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">*</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">字段名</span>
<span style="color: rgba(0, 128, 0, 1)">@Where</span> <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">100</span>) <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span>, <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">条件语句</span>
<span style="color: rgba(0, 128, 0, 1)">@GroupBy</span> <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">100</span>) <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span>,<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">分组字段</span>
<span style="color: rgba(0, 128, 0, 1)">@OrderBy</span> <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">100</span>), <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">排序字段</span>
<span style="color: rgba(0, 128, 0, 1)">@PageIndex</span> <span style="color: rgba(0, 0, 255, 1)">INT</span> <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>, <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">当前页数</span>
<span style="color: rgba(0, 128, 0, 1)">@PageSize</span> <span style="color: rgba(0, 0, 255, 1)">INT</span> <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">20</span>, <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">每页显示记录数</span>
<span style="color: rgba(0, 128, 0, 1)">@TotalCount</span> <span style="color: rgba(0, 0, 255, 1)">INT</span> <span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span> OUTPUT <span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">总记录数</span>
<span style="color: rgba(0, 0, 255, 1)">AS</span>
<span style="color: rgba(0, 0, 255, 1)">BEGIN</span>
<span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">SQL拼接语句</span>
<span style="color: rgba(0, 0, 255, 1)">DECLARE</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span> <span style="color: rgba(0, 0, 255, 1)">NVARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">4000</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">总记录数</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">SELECT @RecordCount=COUNT(1) FROM </span><span style="color: rgba(255, 0, 0, 1)">'</span> <span style="color: rgba(128, 128, 128, 1)">+</span> <span style="color: rgba(0, 128, 0, 1)">@TableName</span>
<span style="color: rgba(0, 0, 255, 1)">IF</span> (<span style="color: rgba(255, 0, 255, 1)">ISNULL</span>(<span style="color: rgba(0, 128, 0, 1)">@Where</span>,<span style="color: rgba(255, 0, 0, 1)">''</span>)<span style="color: rgba(128, 128, 128, 1)"><></span><span style="color: rgba(255, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> WHERE </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@Where</span>
<span style="color: rgba(0, 0, 255, 1)">ELSE</span> <span style="color: rgba(0, 0, 255, 1)">IF</span> (<span style="color: rgba(255, 0, 255, 1)">ISNULL</span>(<span style="color: rgba(0, 128, 0, 1)">@GroupBy</span>,<span style="color: rgba(255, 0, 0, 1)">''</span>)<span style="color: rgba(128, 128, 128, 1)"><></span><span style="color: rgba(255, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> GROUP BY </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@GroupBy</span>
<span style="color: rgba(0, 0, 255, 1)">EXEC</span> SP_EXECUTESQL <span style="color: rgba(0, 128, 0, 1)">@SQL</span>,N<span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">@RecordCount INT OUTPUT</span><span style="color: rgba(255, 0, 0, 1)">'</span>,<span style="color: rgba(0, 128, 0, 1)">@TotalCount</span><span style="color: rgba(0, 0, 0, 1)"> OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">总页数</span>
<span style="color: rgba(0, 0, 255, 1)">DECLARE</span> <span style="color: rgba(0, 128, 0, 1)">@PageCount</span> <span style="color: rgba(0, 0, 255, 1)">INT</span>
<span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(0, 128, 0, 1)">@PageCount</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(255, 0, 255, 1)">CEILING</span>((<span style="color: rgba(0, 128, 0, 1)">@TotalCount</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0.0</span>)<span style="color: rgba(128, 128, 128, 1)">/</span><span style="color: rgba(0, 128, 0, 1)">@PageSize</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)">简单分页</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@OrderBy</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">) AS RowNum,</span><span style="color: rgba(255, 0, 0, 1)">'</span> <span style="color: rgba(128, 128, 128, 1)">+</span> <span style="color: rgba(0, 128, 0, 1)">@FieldName</span> <span style="color: rgba(128, 128, 128, 1)">+</span> <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> FROM </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@TableName</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> AS A</span><span style="color: rgba(255, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">IF</span> (<span style="color: rgba(255, 0, 255, 1)">ISNULL</span>(<span style="color: rgba(0, 128, 0, 1)">@Where</span>,<span style="color: rgba(255, 0, 0, 1)">''</span>)<span style="color: rgba(128, 128, 128, 1)"><></span><span style="color: rgba(255, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> WHERE </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@Where</span>
<span style="color: rgba(0, 0, 255, 1)">ELSE</span> <span style="color: rgba(0, 0, 255, 1)">IF</span> (<span style="color: rgba(255, 0, 255, 1)">ISNULL</span>(<span style="color: rgba(0, 128, 0, 1)">@GroupBy</span>,<span style="color: rgba(255, 0, 0, 1)">''</span>)<span style="color: rgba(128, 128, 128, 1)"><></span><span style="color: rgba(255, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> GROUP BY </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@GroupBy</span>
<span style="color: rgba(0, 0, 255, 1)">IF</span> (<span style="color: rgba(0, 128, 0, 1)">@PageIndex</span><span style="color: rgba(128, 128, 128, 1)"><=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@PageIndex</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>
<span style="color: rgba(0, 0, 255, 1)">IF</span> <span style="color: rgba(0, 128, 0, 1)">@PageIndex</span><span style="color: rgba(128, 128, 128, 1)">></span><span style="color: rgba(0, 128, 0, 1)">@PageCount</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@PageIndex</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@PageCount</span>
<span style="color: rgba(0, 0, 255, 1)">DECLARE</span> <span style="color: rgba(0, 128, 0, 1)">@BeginRowNum</span> <span style="color: rgba(0, 0, 255, 1)">INT</span>,<span style="color: rgba(0, 128, 0, 1)">@EndRowNum</span> <span style="color: rgba(0, 0, 255, 1)">INT</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@BeginRowNum</span><span style="color: rgba(128, 128, 128, 1)">=</span>(<span style="color: rgba(0, 128, 0, 1)">@PageIndex</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>)<span style="color: rgba(128, 128, 128, 1)">*</span><span style="color: rgba(0, 128, 0, 1)">@PageSize</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@EndRowNum</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@BeginRowNum</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(0, 128, 0, 1)">@PageSize</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>
<span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 128, 0, 1)">@SQL</span> <span style="color: rgba(128, 128, 128, 1)">+</span> <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">) AS B WHERE B.RowNum BETWEEN </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 255, 1)">CONVERT</span>(<span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>),<span style="color: rgba(0, 128, 0, 1)">@BeginRowNum</span>)<span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)"> AND </span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(255, 0, 255, 1)">CONVERT</span>(<span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>),<span style="color: rgba(0, 128, 0, 1)">@EndRowNum</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">EXEC</span>(<span style="color: rgba(0, 128, 0, 1)">@SQL</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">END</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<div class="cnblogs_code"><img id="code_img_closed_622cc5b2-7b07-4090-94cb-cc0c4991f7e0" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_622cc5b2-7b07-4090-94cb-cc0c4991f7e0" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_622cc5b2-7b07-4090-94cb-cc0c4991f7e0" class="cnblogs_code_hide">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 通用分页
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> IEnumerable<T> GetCommonPaging<T>(<span style="color: rgba(0, 0, 255, 1)">string</span> tableName, <span style="color: rgba(0, 0, 255, 1)">string</span> fieldName, <span style="color: rgba(0, 0, 255, 1)">string</span> <span style="color: rgba(0, 0, 255, 1)">where</span>, <span style="color: rgba(0, 0, 255, 1)">string</span> groupby, <span style="color: rgba(0, 0, 255, 1)">string</span> <span style="color: rgba(0, 0, 255, 1)">orderby</span>, <span style="color: rgba(0, 0, 255, 1)">int</span> pageIndex, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> pageSize)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> para = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DynamicParameters();
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TableName</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, tableName);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FieldName</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, fieldName);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Where</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">where</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">GroupBy</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, groupby);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">OrderBy</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">orderby</span><span style="color: rgba(0, 0, 0, 1)">);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PageIndex</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, pageIndex);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PageSize</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, pageSize);
para.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TotalCount</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, dbType: DbType.Int32, direction: ParameterDirection.Output);
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> conn =<span style="color: rgba(0, 0, 0, 1)"> GetCon())
{
conn.Open();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> conn.Query<T>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PageList</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, para, commandType: CommandType.StoredProcedure);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p><br><br>
来源:https://www.cnblogs.com/atomy/p/12784361.html
頁:
[1]