本人使用的是.netframework4.5 WPF 框架开发的上位机软件,在程序开发中使用ORM和FreeSql作为数据库开发工具,最近在使用FreeSql的时候遇到一些问题,解决后记录下来。
如何在C#中使用FreeSql进行存储过程的执行,以下代码示例:
var dt = ORM.FreeSqlOperater.mandFluent("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 SQLNOT DETERMINISTICCONTAINS SQLSQL SECURITY DEFINERCOMMENT '获取产品在当前工单下所有测试项状态结果'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 单例模式//省略记录日志,可自由发挥}}}