Subsonic 3无法识别存储过程输出参数

时间:2009-09-13 02:29:21

标签: stored-procedures subsonic subsonic3

使用Subsonic 3.0.0.3,看起来有一些问题,A2onic将存储过程参数识别为输出参数。

在StoredProcedures.cs类中,我找到了我的存储过程定义,但最后一个参数被错误地定义为“AddParameter”。

sp.Command.AddParameter("HasPermission",HasPermission,DbType.Boolean);

当我执行sp.Execute()并尝试读取sp.Command.OutputValues [0]的值时,该值为null。

如果编辑定义是这样的话;

sp.Command.AddOutputParameter("HasPermission", DbType.Boolean);

然后返回值并且是正确的值类型

我不确定我是如何“修复”这个 - 因为每次通过“运行自定义工具”重新生成SP类时,参数定义都需要编辑。我应该以某种方式编辑T4模板吗?

请告知。

编辑:我忘了提到我正在使用MS SQL 2008(10.0.2531)

1 个答案:

答案 0 :(得分:0)

希望亚音速3.0.0.4这是固定的,但遗憾的是没有。修复可以在此博客条目之后完成; http://brianmrush.wordpress.com/2010/01/15/subsonic-and-t4-templates/

基本上将此添加到SQLServer.ttinclude;

p.ParameterDirection = GetParamDirection(row["PARAMETER_MODE"].ToString());

将此方法添加到SQLServer.ttinclude;

string GetParamDirection(string paramMode)
{
    switch (paramMode)
    {
    case "IN":
        return "ParameterDirection.Input";
    case "INOUT":
        return "ParameterDirection.InputOutput";
        case "OUT":
        return "ParameterDirection.Output";
    case "RETURN":
        return "ParameterDirection.ReturnValue";
    default:
        return "ParameterDirection.Input";
    }
}

然后在StoredProcedure.tt文件中修改第21行,看起来像这样;

sp.Command.AddParameter("<#=par.Name#>",<#=par.CleanName#>,DbType.<#=par.DbType#>);