轻量级ORM框架Dapper(5)之调用存储过程

1.根据需求创建存储过程:

ALTER PROC [dbo].[Query_ProductNameAndPrice]
@productNO INT,
@procudtName VARCHAR(50) OUTPUT,
@price MONEY OUTPUT
AS
SELECT *  FROM Product WHERE ProductNo=@productNO
SELECT @procudtName=ProductName,@price=Price FROM Product WHERE ProductNo=@productNO

第一条sql语句的添加是为了执行完存储过程后,Dapper会自动根据配置将数据封装到对象中(而且此对象必须是原始类型(数据表对应的实体类,而不是自定义的中间实体类)).
第二条sql语句,为了是设置必要的输出参数(outpiut)
存储过程,在创建完成后就已经预编译过了,以后直接调用即可。
2.在Dapper框架中调用存储过程:
使用Dapper提供的扩展方法,调用存储过程

 Query<T>(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null);
/// 
 /// 在Dapper中调用存储过程(查询操作)
 /// 
 public static void CallStoredProcess() {

     try
     {
         using (SqlConnection connect=new SqlConnection(ConnectStr))
         {
             string procudtName = string.Empty;
             decimal price = 0;

             //设置输入输出参数
             DynamicParameters dp = new DynamicParameters();
             dp.Add("@productNO",1013, DbType.Int16);//输入参数
             dp.Add("@procudtName",procudtName,DbType.String,ParameterDirection.Output,20);
             dp.Add("@price",price,DbType.Decimal,ParameterDirection.Output);

             //执行存储过程
             //方法1:
             //connect.Execute("Query_ProductNameAndPrice",dp,null,null,CommandType.StoredProcedure);
             //方法2:可以返回查询结果
             //Query_ProductNameAndPrice 为存储过程名称
             //设置commandType为存储过程
             Product  product= connect.Query<Product>("Query_ProductNameAndPrice",dp,commandType:CommandType.StoredProcedure).Single();

             //获取输出参数
             procudtName = dp.Get<string>("@procudtName");
             price = dp.Get<decimal>("@price");

         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }

Result:
Product对象:
轻量级ORM框架Dapper(5)之调用存储过程_第1张图片
输出参数:
在这里插入图片描述
第二个测试的存储过程:

ALTER PROC [dbo].[ProductInserted]
@procudtName VARCHAR(50),
@price MONEY,
@description VARCHAR(50)
AS
INSERT INTO Product(ProductName,Price,Description) VALUES(@procudtName,@price,@description)

Codes:

/// 
///调用Insert存储过程(不包含输出参数) --使用匿名函数参数化赋值
/// 
public static void CallStoredProcess02()
{
    try
    {
        using (SqlConnection connect = new SqlConnection(ConnectStr))
        {
          int result= connect.Execute("ProductInserted",new {@procudtName= "东风本田 UR-V ",@price=250000,@description= "2017款 1.5T 无级2 40TURBO "},commandType: CommandType.StoredProcedure); 
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
}

你可能感兴趣的:(C#/.NET开发,之ORM框架)