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

发布于 2024-08-04 09:55:37 字数 577 浏览 6 评论 0原文

您好,使用 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)

Hi using Subsonic 3.0.0.3 it appears there is some issue with Subsonic identifying Stored Procedure paramters as output parameters.

In the StoredProcedures.cs class I find my stored procedure definition but the last parameter is defined incorrectly as a 'AddParameter'.

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

When I sp.Execute() and attempt to read the value of the sp.Command.OutputValues[0] the value is null.

If the definition is edited to be like this;

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

Then the value is returned and is correct value type

I am not sure how I 'fix' this - as everytime I regen the SP class via the 'Run Custom Tool' the parameter definitions require editing. Should I edit a T4 template somehow?

Please advise.

EDIT: I forgot to mention I am using MS SQL 2008 (10.0.2531)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

活泼老夫 2024-08-11 09:55:37

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

Was hoping with subsonic 3.0.0.4 this was fixed but sadly no. Fix can be done following this blog entry; http://brianmrush.wordpress.com/2010/01/15/subsonic-and-t4-templates/

Basically add this to SQLServer.ttinclude;

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

And ad this method to 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";
    }
}

Then in the StoredProcedure.tt file modify line 21 to look like this;

sp.Command.AddParameter("<#=par.Name#>",<#=par.CleanName#>,DbType.<#=par.DbType#>);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文