我有一个问题。请帮助解决我的问题
我有一个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;
}
答案 0 :(得分:3)
如果你已经在存储过程中声明了参数的默认值 - 那么你可以只从<#>传递这个参数来完成c#代码,在这种情况下它将具有默认值。< / p>
在您的情况下抛出异常,因为无法将字符串"default"
转换为您的参数类型SqlDateTime。
答案 1 :(得分:0)
你可以在发送datetime参数时使用if条件。
if(some condition)
{
cmd.Parameters.AddWithValue("@dateto", dateTimeValue);
}
此处datetimeValue是您要传递的值。因此,只有在需要时才会传递dateTimeValue。 错误是由于您传递的字符串“default”。