Dapper.NET使用入门(四)【用Dapper数据访问层封装】
来源:互联网 发布:java全栈开发工程师 编辑:程序博客网 时间:2024/04/19 08:25
每天都是一个起点,每天都有一点进步,每天都有一点收获!
Program.cs主程序:
internal class Program { private static void Main(string[] args) { InitSqlMaker.InitSqlMakerO(); //构建查询语句之一(全连接) SelectSqlMaker selectSqlMaker=new SelectSqlMaker(); selectSqlMaker.FullJoinSelectTest(); //构建删除语句之一(条件删除) DeleteSqlMaker.WhereDeleteTest(); CustomerBLL bll=new CustomerBLL(); List<Customer> list=bll.GetBy().ToList(); Console.WriteLine(list.Count+"条记录:"+list[0].Name + "---" + list[0].Address); List<Customer> listmuch = bll.GetCustomersBystorage().ToList(); Console.WriteLine(listmuch.Count + "条记录!" ); Console.ReadKey(); } }
表现
public static class Performance { public static void SetUp() { QueryMaker.DbScheme = "dbo"; } public static void FullSelectForCustomerTime() { int cnt = 1000000; string sql = null; var stopwatch = System.Diagnostics.Stopwatch.StartNew(); for (int i = 0; i < cnt; i++) { sql = QueryMaker.New() .SELECT() .Col("Id", "Id") .Col("Name", "Name") .Col("Description", "Desc") .Col("Address", "Addr") .Col("Zip", "Zip") .Col("Balance", "Balance") .Col("Registered", "Reg") .FROM().Tab("Customer") .WHERE("Zip = @zip") .ORDERBY("Name", SortAs.Asc) .RawSql(); } stopwatch.Stop(); //var example = "SELECT\n\tId AS Id\n\t, Name AS Name" + "\n\t, Description AS Desc\n\t, Address AS Addr\n\t, Zip AS Zip" + "\n\t, Balance AS Balance\n\t, Registered AS Reg" + "\nFROM\n\t[dbo].[Customer]" + "\nWHERE\n\tZip = @zip\nORDER BY Name ASC;"; System.Diagnostics.Trace.WriteLine(stopwatch.Elapsed.TotalMilliseconds.ToString("Total 0.00 ms")); System.Diagnostics.Trace.WriteLine( ((double) (stopwatch.Elapsed.TotalMilliseconds*1000)/cnt).ToString("0.00 us per one query")); } }
初始化语句构建器
public static class InitSqlMaker { public static void InitSqlMakerO() { var current = QueryMaker.Current; Console.WriteLine("current ISqlMaker:" + (current is ISqlMaker)); var maker = QueryMaker.New(); Console.WriteLine("maker ISqlMaker:" + (maker is ISqlMaker)); Console.WriteLine("maker ISqlFirst:" + (maker is ISqlFirst)); Console.WriteLine("maker.Equals(current):" + (maker.Equals(current))); } public static void MakeEmptyQuery() { var newQuery = QueryMaker.Current; try { newQuery.RawSql(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
Select语句构建
public class SelectSqlMaker { private string _dbScheme; public void SetUp() { _dbScheme = "dbo"; // 默认MSSQL 架构 } public void InitSelectDistinctTest() { var maker = QueryMaker.New(_dbScheme) .SelectDistinct("Name, Description, Address"); var sql = maker.RawSql(); // var example = "SELECT DISTINCT\n\tName\n\t, Description\n\t, Address;"; } public void SelectUnionTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .UNION(); var sql = maker.RawSql(); var example = "SELECT\nUNION\nSELECT;"; maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id") .UNION(IsALL: true) .Col("Id"); sql = maker.RawSql(); example = "SELECT\n\tId\nUNION ALL\nSELECT\n\tId;"; } public void InitSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT("Name, t.Description, t.Address AS adr"); var sql = maker.RawSql(); //var example = "SELECT\n\tName\n\t, t.Description\n\t, t.Address AS adr;"; } public void AddColSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT("Id") .Col("Name") .Col("Description", "Desc") .Col("t.Address", "Addr"); var sql = maker.RawSql(); //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr;"; } public void FromSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT("Id") .Col("Name") .Col("Description", "Desc") .Col("t.Address", "Addr") .FROM("table, dbo.table, [dbo].[Customer] cst"); var sql = maker.RawSql(); //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr\nFROM" + "\n\ttable\n\t, dbo.table\n\t, [dbo].[Customer] cst;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void EmptySchemeSelectTest() { var maker = QueryMaker.New() .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[Customer];"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void AddTableSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Table") .Tab("Table", "Tab") .Tab("Table", "Tab", "tbl"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Table]\n\t, [dbo].[Table] AS Tab\n\t, [tbl].[Table] AS Tab;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void WhereSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .WHERE("Zip = @zip AND Id >= @id"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip AND Id >= @id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void WhereAndSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .WHERE("Zip = @zip") .WhereAnd("Id >= @id"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tAND Id >= @id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void WhereOrSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .WHERE("Zip = @zip") .WhereOr("Id >= @id"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tOR Id >= @id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void JoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .JOIN("Address", "addr"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nINNER JOIN [dbo].[Address] AS addr;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void LeftJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .LeftJoin("Address", "addr"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nLEFT JOIN [dbo].[Address] AS addr;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void RightJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .RightJoin("Address", "addr"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nRIGHT JOIN [dbo].[Address] AS addr;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void FullJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .FullJoin("Address", "addr"); var sql = maker.RawSql(); Console.WriteLine(sql); Console.WriteLine("-------------------------------------------------------"); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nFULL JOIN [dbo].[Address] AS addr;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void OnJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .JOIN("Address", "addr") .ON("cst.Id = addr.Id"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nINNER JOIN [dbo].[Address] AS addr" + "\n\tON cst.Id = addr.Id;"; } public void OnAndJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .JOIN("Address", "addr") .ON("cst.Id = addr.Id") .OnAnd("cst.Col = addr.Col"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nINNER JOIN [dbo].[Address] AS addr" + "\n\tON cst.Id = addr.Id" + "\n\tAND cst.Col = addr.Col;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void OnOrJoinSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .JOIN("Address", "addr") .ON("cst.Id = addr.Id") .OnOr("cst.Col = addr.Col"); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nINNER JOIN [dbo].[Address] AS addr" + "\n\tON cst.Id = addr.Id" + "\n\tOR cst.Col = addr.Col;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void OrderBySelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .ORDERBY("Id", SortAs.Desc); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void OrderThenSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .ORDERBY("Id", SortAs.Desc) .OrderThen("Zip", SortAs.Asc); var sql = maker.RawSql(); var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC, Zip ASC;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void GroupBySelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .GROUPBY("Id"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void GroupThenSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer", "cst") .GROUPBY("Id") .GroupThen("Zip"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id, Zip;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void HavingSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .GROUPBY("Zip") .HAVING("COUNT(Id) >= @id"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip" + "\nHAVING COUNT(Id) >= @id;"; } public void HavingAndSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .GROUPBY("Zip") .HAVING("COUNT(Id) >= @id") .HavingAnd("MIN(Zip) = @zip"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip" + "\nHAVING COUNT(Id) >= @id\n\tAND MIN(Zip) = @zip;"; } public void HavingOrSelectTest() { var maker = QueryMaker.New(_dbScheme) .SELECT() .Col("Id", "Id") .FROM() .Tab("Customer") .GROUPBY("Zip") .HAVING("COUNT(Id) >= @id") .HavingOr("MIN(Zip) = @zip"); var sql = maker.RawSql(); //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip" + "\nHAVING COUNT(Id) >= @id\n\tOR MIN(Zip) = @zip;"; } }
Insert语句构建
public static class InsertSqlMaker { private static string _dbScheme; public static void SetUp() { _dbScheme = "dbo"; // 默认MSSQL 架构 } public static void InitInsert() { var maker = QueryMaker.New(_dbScheme).INSERT("Customer"); var sql = maker.RawSql(); //var example = "INSERT INTO [dbo].[Customer]"; } public static void AddColumnTest() { var maker = QueryMaker.New(_dbScheme) .INSERT("Customer") .Col("Name") .Col("Description") .Col("Address"); var sql = maker.RawSql(); //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)"; } public static void ValuesTest() { var maker = QueryMaker.New(_dbScheme) .INSERT("Customer") .Col("Name") .Col("Description") .Col("Address") .VALUES("@name, @description, @address"); var sql = maker.RawSql(); //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t);"; } public static void AddValueTest() { var maker = QueryMaker.New(_dbScheme) .INSERT("Customer") .Col("Name") .Col("Description") .Col("Address") .Col("Zip") .VALUES("@name, @description, @address").Param("zip"); var sql = maker.RawSql(); //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);"; } public static void JustAddValueTest() { var maker = QueryMaker.New(_dbScheme) .INSERT("Customer") .Col("Name") .Col("Description") .Col("Address") .Col("Zip") .VALUES() .Param("@name") .Param("description") .Param("@address") .Param("zip"); var sql = maker.RawSql(); //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);"; } }
Delete语句构建
public static class DeleteSqlMaker { public static void SetUp() { QueryMaker.DbScheme = "dbo"; } public static void InitDeleteTest() { var maker = QueryMaker.New().DELETE("Customer"); var sql = maker.RawSql(); var example = "DELETE FROM [dbo].[Customer];"; } public static string WhereDeleteTest() { var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip AND Id >= @id"); var sql = maker.RawSql(); //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip AND Id >= @id;"; Console.WriteLine(sql); Console.WriteLine("-------------------------------------------------------"); return sql; } public static string WhereAndDeleteTest() { var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip").WhereAnd("Id >= @id"); var sql = maker.RawSql(); //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tAND Id >= @id;"; Console.WriteLine(sql); return sql; } public static string WhereOrDeleteTest() { var maker = QueryMaker.New() .DELETE("Customer") .WHERE("Zip = @zip") .WhereOr("Id >= @id"); var sql = maker.RawSql(); //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tOR Id >= @id;"; return sql; } }
Update语句构建
public class UpdateSqlMaker { public void SetUp() { QueryMaker.DbScheme = "dbo"; } public void InitUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer];"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void SetUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer") .SET("Id = @id, Name = @name"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void ValueSetUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer") .SET() .Val("Id", "id") .Val("Name", "name"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;"; } public void WhereUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer") .SET("Id = @id") .Val("Name", "name") .WHERE("Zip = @zip AND Id >= @id"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip AND Id >= @id;"; } public void WhereAndUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer") .SET("Id = @id") .Val("Name", "name") .WHERE("Zip = @zip") .WhereAnd("Id >= @id"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip\n\tAND Id >= @id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } public void WhereOrUpdateTest() { var maker = QueryMaker.New() .UPDATE("Customer") .SET("Id = @id") .Val("Name", "name") .WHERE("Zip = @zip") .WhereOr("Id >= @id"); var sql = maker.RawSql(); //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip\n\tOR Id >= @id;"; //Assert.That(sql, Is.EqualTo(example).IgnoreCase); } }
Customer业务逻辑层
class CustomerBLL { public static IDapperContext context = new DapperContext(); public static IFactoryRepository repoFactory = new FactoryRepository(); public static IUnitOfWork unitOfWork = new UnitOfWork(context, repoFactory); public static Container container=new Container(); public CustomerBLL() { //container.Register<IDapperContext, DapperContext>(); //container.Register<IFactoryRepository, FactoryRepository>(); //container.Register<IUnitOfWork, UnitOfWork>(); } public IEnumerable<Customer> GetBy() { IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>(); //如果你没有为数据库实体任何额外的查询或存储过程,你可以使用的空枚举 //var userRepo = unitOfWork.GetRepository<User, EmptyEnum>(); IEnumerable<Customer> customers = repo.GetBy( where: new { Zip = "12345", Registered = new DateTime(year: 2013, month: 7, day: 7) }, order: new { Registered = SortAs.Desc, Name = SortAs.Asc } ); return customers; } //通过存储过程获取数据 public IEnumerable<Customer> GetCustomersBystorage() { IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>(); // Executing stored procedure var param = new DynamicParameters(); param.Add("@startIndex", 10); param.Add("@endIndex", 20); param.Add("@count", dbType: DbType.Int32, direction: ParameterDirection.Output); //字符串返回输出参数 //param.Add("@errorMsg", dbType: DbType.String, size: 4000, direction: ParameterDirection.ReturnValue); IEnumerable<Customer> customers = repo.Exec<Customer>(CustomerEnum.GetCustomerByPage, param); int count = param.Get<int>("@count"); return customers; } }
DapperDAL程序集下载地址
点击
app.config内容:
<?xml version="1.0" encoding="utf-8"?><configuration> <connectionStrings> <add name="DapperDal" providerName="System.Data.sqlclient" connectionString="Data Source=.\SQLINSTANCE;Initial Catalog=DapperDalDb;Persist Security Info=True;User ID=sa;Password=123456"/> </connectionStrings> <appSettings> <add key="UsedConnectionString" value="DapperDal"/> <add key="UseMiniProfilerForSql" value="true"/> <add key="SqlCommandTimeOut" value="15"/> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup></configuration>
SQL脚本:
USE [DapperDalDb]GO SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Customer]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](64) NOT NULL, [Description] [nvarchar](512) NULL, [Address] [nvarchar](128) NULL, [Zip] [nvarchar](5) NULL, [Balance] [decimal](15, 2) NULL, [Registered] [datetime] NULL, CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED ( [Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO/****** Object: StoredProcedure [dbo].[spCustomerListByPageGet] Script Date: 05/31/2013 00:23:57 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER OFFGOCREATE PROCEDURE [dbo].[spCustomerListByPageGet](@startIndex INT, @endIndex INT, @count INT OUT)ASBEGIN SET NOCOUNT ON; DECLARE @tab TABLE (Id INT) SET @Count = ( SELECT COUNT(Id) FROM dbo.Customer ); WITH CustomerCTE(Id, RowNumber) AS ( SELECT c.Id AS Id, ROW_NUMBER() OVER(ORDER BY c.Registered DESC, c.Id) AS 'RowNumber' FROM dbo.Customer c ) INSERT INTO @tab SELECT Id FROM CustomerCTE WHERE RowNumber BETWEEN @startIndex AND @endIndex SELECT c.[Id] ,c.[Name] ,c.[Description] ,c.[Address] ,c.[Zip] ,c.[Balance] ,c.[Registered] FROM dbo.Customer c, @tab subTable WHERE c.Id = subTable.IdENDGO
运行结果如图:
0 0
- Dapper.NET使用入门(四)【用Dapper数据访问层封装】
- Dapper.NET使用入门(一)【LINQ2Dapper】
- Dapper.NET使用入门(二)【Helper】
- Dapper.NET使用入门(三)【Helper测试】
- Dapper.NET使用
- Dapper.net 的简单封装
- Dapper
- Dapper
- Dapper
- Dapper使用
- .net core2.0下使用Identity改用dapper存储数据
- [ASP.NET]Dapper小型ORM的使用
- .NET Core 使用Dapper 操作MySQL
- dapper-dot-net/Dapper NET40/SqlMapper.cs
- dapper.net for mysql
- Dapper .NET Tutorial I
- Dapper的基本使用
- Dapper的基本使用
- sql server 2008 R2 将带有数字和非数字的字段进行排序
- windows+nginx+memcached+tomcat做负载均衡
- 先presentModalViewController后pushViewController没有效果的解决方法
- 关于不同位数的值与操作
- Leetcode_17
- Dapper.NET使用入门(四)【用Dapper数据访问层封装】
- linux下ssh免密登录
- SIP消息
- ieBetter.js-让IE6-IE8拥有IE9+,Chrome等浏览器特性
- 像阿西莫机器人一样智能 Vimtag P1摄像机的使用体验
- makefile:3: *** recipe commences before first target. Stop.
- sizeof与strlen的区别(总结)
- axure使用技巧汇总
- Day4:Lazy Day