如何从C#传递可选参数到sql函数

时间:2014-09-25 14:40:43

标签: c# sql sql-server

我有一个问题。请帮助解决我的问题

我有一个SQL函数

function [dbo].[fnKudishikaAmt]
    (@ParishName nvarchar(100), @Hno int, @dateto datetime = Null)
Returns Decimal(15,2)

此功能通过使用执行命令

显示正确的结果
Select dbo.fnKudishikaAmt('St.George Malankara Catholic Church', 29, default)

我的要求是应该从C#

调用此函数

我收到错误

  

从字符串转换日期时间

时转换失败

代码:

public double kudishikatotal(string ParishName, Int32 HouseNo)
{
    String SQLText = "select ChurchDB.dbo.fnKudishikaAmt(@ParishName, @Hno, @dateto) as fnresult";

    SqlCommand cmd = new SqlCommand(SQLText);
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@ParishName", ParishName);
    cmd.Parameters.AddWithValue("@Hno", HouseNo);
    cmd.Parameters.AddWithValue("@dateto", "default");

    string rval = GetSingleValue(cmd);
    double kudiamt = 0;

    if (rval != null)
    {
        kudiamt = Convert.ToDouble(rval);
    }

    return kudiamt;
}

private static string GetSingleValue(SqlCommand cmd)
{
    string ConString = connectionstring();
    string returnvalue = "";

    using (SqlConnection con = new SqlConnection(ConString))
    {
        cmd.Connection = con;
        con.Open();
        returnvalue = cmd.ExecuteScalar().ToString();
        con.Close();
    }

    return returnvalue;
}

2 个答案:

答案 0 :(得分:3)

如果你已经在存储过程中声明了参数的默认值 - 那么你可以只从<#>传递这个参数来完成c#代码,在这种情况下它将具有默认值。< / p>

在您的情况下抛出异常,因为无法将字符串"default"转换为您的参数类型SqlDateTime。

答案 1 :(得分:0)

你可以在发送datetime参数时使用if条件。

if(some condition)
{
 cmd.Parameters.AddWithValue("@dateto", dateTimeValue);
}

此处datetimeValue是您要传递的值。因此,只有在需要时才会传递dateTimeValue。 错误是由于您传递的字符串“default”。