当前位置: 首页 > 工具软件 > FreeSQL > 使用案例 >

FreeSql执行存储过程的使用方式

凤经武
2023-12-01

       本人使用的是.netframework4.5 WPF 框架开发的上位机软件,在程序开发中使用ORM和FreeSql作为数据库开发工具,最近在使用FreeSql的时候遇到一些问题,解决后记录下来。

如何在C#中使用FreeSql进行存储过程的执行,以下代码示例:

 var dt = ORM.FreeSqlOperater.pboxSql.Ado.CommandFluent("CALL get_product_status(@a1,@a2,@a3,@a4,@a5,@'a6',@'a7')")
                .WithParameter("a1", p_Index)
                .WithParameter("a2", p_Dispatch_No)
                .WithParameter("a3", p_Part_No)
                .WithParameter("a4", p_Product_No)
                .WithParameter("a5", p_Operation_No)
                .WithParameter("a6", null, v => v.Direction = ParameterDirection.Output)
                .WithParameter("a7", null, v => v.Direction = ParameterDirection.Output)
                .ExecuteDataTable();

 我的存储过程是这样的:

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_product_status`(
	IN `p_Index` INT,
	IN `p_Dispatch_No` VARCHAR(50),
	IN `p_Part_No` VARCHAR(50),
	IN `p_Product_No` VARCHAR(50),
	IN `p_Operation_No` INT,
	OUT `o_Result` INT,
	OUT `o_Seq_No` VARCHAR(50)
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '获取产品在当前工单下所有测试项状态结果'
BEGIN

-----省略内容--------------

最后一步
select o_Result,o_Seq_No;输出两个参数
END

       可以看到我有两个输出参数,其实FreeSql里面的CommandFluent这个方法,实际上和我们使用sql语句是一样的,因为我有两个输出参数,其中一个输出参数是字符,字符在sql里面需要添加单引号,我尝试了很久终于知道需要在@后面加上单引号,说明这是一个字符参数。@符号表示这是一个参数,请注意直接写sql语句和FreeSql里面执行存储过程的区别就在于,参数需要添加@符号。

        因为项目需要FreeSql我是做了一个公共类,方便使用和记录日志。部分代码如下:

namespace ORM
{
    public class FreeSqlOperater
    {

        /// <summary>
        /// 生产数据库操作对象
        /// </summary>
        public static IFreeSql pboxSql = null;
      static FreeSqlOperater()
      {
           pboxSql = new FreeSql.FreeSqlBuilder()
                    .UseConnectionString(FreeSql.DataType.MySql, pboxConnstr)
                    .UseAutoSyncStructure(false) //不自动同步实体结构到数据库
                    .Build(); //请务必定义成 Singleton 单例模式

           //省略记录日志,可自由发挥
       }
    }
}

 类似资料: