【问题标题】:Subsonic 3 fails to identify Stored Procedure Output ParameterSubsonic 3 无法识别存储过程输出参数
【发布时间】:2009-09-13 02:29:20
【问题描述】:

您好,使用 Subsonic 3.0.0.3 似乎 Subsonic 将存储过程参数识别为输出参数存在一些问题。

在 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)

【问题讨论】:

标签: stored-procedures subsonic subsonic3


【解决方案1】:

希望在亚音速 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#>);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2010-11-23
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多