如何为 ADO.NET 中的表值函数调用传递默认关键字

问题描述 投票:0回答:3

所以这是交易。在我们的数据库中,出于安全性和模块化的目的,我们将大部分读取(即选择语句)包装在表值函数中。所以我有一个 TVF,它定义了一个或多个可选参数。

我相信有一个带有默认参数的 TVF 要求在像这样调用 TVF 时使用关键字

default

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)

很好,一切都在查询分析器中工作,但是当实际从 ADO.NET 发出此请求时,我不确定如何创建一个 sql 参数,该参数实际上将

default
词放入呈现的 sql 中。

我现在有大致这样的东西:

String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";

DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);

SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

那么,有人知道如何将

default
传递给 TVF 吗?

ado.net user-defined-functions sqlparameter
3个回答
3
投票
SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

您不必为默认添加以上代码(可选参数)。 SQL Server 将使用您的 UDF 中定义的默认值。但是,如果您想传递不同的值,那么您可以传递:

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int); 
optionalParam.Value = newValue; 
command.Parameters.Add(optionalParam); 

1
投票

我会这样做的:

public void YourMethod(int rparam, int? oparam = null)
{
    String qry = string.Format("select * from fn_SampleTVF(@requiredParam, {0})"
        , !oparam.HasValue ? "default" : "@optionalParam");

    SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
    someRequiredParam.Value = rparam;
    command.Parameters.Add(someRequiredParam);

    if (oparam.HasValue)
    {
        SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
        optionalParam.Value = oparam.Value;
        command.Parameters.Add(optionalParam);
    }
}

0
投票

您可以将 Null 作为参数值传递。

这篇文章展示了例子。

© www.soinside.com 2019 - 2024. All rights reserved.