Dapper官方文档(六)【参数之匿名类型,动态类型,列表类型,字符串类型】

傷城~ 2021-07-04 14:49 825阅读 0赞

匿名类型参数

描述

Dapper通过支持匿名类型使其可以简单、安全(SQL注入)的使用参数。

单次

执行一次SQL命令。

  1. var sql = "EXEC Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var affectedRows = connection.Execute(sql,
  6. new { Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  7. commandType: CommandType.StoredProcedure);
  8. My.Result.Show(affectedRows);
  9. }

多次

执行多次SQL命令。

  1. var sql = "EXEC Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var affectedRows = connection.Execute(sql,
  6. new[]
  7. {
  8. new { Kind = InvoiceKind.WebInvoice, Code = "Many_Insert_1"},
  9. new { Kind = InvoiceKind.WebInvoice, Code = "Many_Insert_2"},
  10. new { Kind = InvoiceKind.StoreInvoice, Code = "Many_Insert_3"}
  11. },
  12. commandType: CommandType.StoredProcedure
  13. );
  14. }

动态类型参数

描述

在Dapper方法中创建并使用参数。

单次

执行一次SQL命令。

  1. var sql = "EXEC Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. DynamicParameters parameter = new DynamicParameters();
  6. parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
  7. parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
  8. parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
  9. connection.Execute(sql,
  10. parameter,
  11. commandType: CommandType.StoredProcedure);
  12. int rowCount = parameter.Get<int>("@RowCount");
  13. }

多次

执行多次SQL命令。

  1. var sql = "EXEC Invoice_Insert";
  2. var parameters = new List<DynamicParameters>();
  3. for (var i = 0; i < 3; i++)
  4. {
  5. var p = new DynamicParameters();
  6. p.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
  7. p.Add("@Code", "Many_Insert_" + (i + 1), DbType.String, ParameterDirection.Input);
  8. p.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
  9. parameters.Add(p);
  10. }
  11. using (var connection = My.ConnectionFactory())
  12. {
  13. connection.Open();
  14. connection.Execute(sql,
  15. parameters,
  16. commandType: CommandType.StoredProcedure
  17. );
  18. var rowCount = parameters.Sum(x => x.Get<int>("@RowCount"));
  19. }

列表类型参数

描述

Dapper允许您使用列表在IN子句中指定多个参数。

  1. var sql = "SELECT * FROM Invoice WHERE Kind IN @Kind;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoices = connection.Query<Invoice>(sql, new { Kind = new[] { InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
  6. }

字符串类型参数

描述

  1. var sql = "SELECT * FROM Invoice WHERE Code = @Code;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoices = connection.Query<Invoice>(sql, new { Code = new DbString { Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();
  6. My.Result.Show(invoices);
  7. }

发表评论

表情:
评论列表 (有 0 条评论,825人围观)

还没有评论,来说两句吧...

相关阅读

    相关 类型基础2 动态类型与静态类型

    静态类型语言:在编译阶段确定所有变量的类型 动态类型语言:在执行阶段确定所有变量的类型 内存角度: 动态类型:在程序运行时,动态计算属性偏移值 静态类型与动态类型对比

    相关 Redis基本数据类型——列表类型

    列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素、或者获取列表某一个片段。 Redis的列表类型是使用双向链表实现的。向两端添加、删除元素的时间复杂度为O

    相关 匿名类型

    匿名类型就是没有名字的类型。在C\3.0中允许我们在程序中声明一个临时的类型来存储数据。匿名类型的对象是必须用var 来声明,但是用var 声明的对象不一定都是匿名对象 匿名