7

为什么这会返回 null?

//seedDate is set to DateTime.Now; con is initialized and open. Not a problem with that
using (SqlCommand command = new SqlCommand("fn_last_business_date", con))
{
       command.CommandType = CommandType.StoredProcedure;
       command.Parameters.AddWithValue("@seed_date", seedDate);//@seed_date is the param name
       object res = command.ExecuteScalar(); //res is always null 
}

但是当我直接在数据库中调用它时,如下所示:

select dbo.fn_last_business_date('8/3/2011 3:01:21 PM') 
returns '2011-08-03 15:01:21.000' 

这是我从代码中调用它时希望看到的结果

为什么,为什么,为什么?

4

3 回答 3

27

为什么每个人都坚持select语法?...

using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("calendar.CropTime", c))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.DateTime).Direction = ParameterDirection.ReturnValue;
    cmd.Parameters.AddWithValue("@d", DateTime.Now);

    cmd.ExecuteNonQuery();

    textBox1.Text = cmd.Parameters["@RETURN_VALUE"].Value.ToString();

}
于 2011-08-03T19:56:22.130 回答
8

尝试:

using (SqlCommand command = new SqlCommand("select dbo.fn_last_business_date(@seed_date)", con))
{
       command.CommandType = CommandType.Text;
       command.Parameters.AddWithValue("@seed_date", seedDate);//@seed_date is the param name
       object res = command.ExecuteScalar(); //res is always null 
}
于 2011-08-03T19:36:49.177 回答
1

你实际上得到了一个没有被捕获的错误。您不会像调用存储过程那样调用标量 udf。

要么将 udf 包装在存储过程中,要么更改语法。我实际上不确定那是什么,因为它并不常见......

啊哈:看到这些问题:

于 2011-08-03T19:38:41.250 回答