如何使用c#从sql标量函数中检索值

时间:2014-01-14 06:34:02

标签: sql sql-server-2008 c#-4.0

我想将paramtere传递给sql标量函数,它将返回一个我想要显示的值。

GetValue是一个sql标量函数

private int GetNewValue()
        {
    int Value = 0;
                string connectionString GetConfigurationSettingValue("ConnectionString");
                int Days = 20;

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand cmd = new SqlCommand("GetValue", connection))
                    {
                        cmd.CommandType = System.Data.CommandType.Text;

                        cmd.Parameters.Add(new SqlParameter("@Time", Days));

                        Value = Convert.ToInt32(cmd.ExecuteScalar());

                    }
                }

                    return  (Value);

但是我无法从Sql Scalar函数中获取值也没有出现任何错误

我有什么遗漏的东西吗?

1 个答案:

答案 0 :(得分:3)

您需要将标量函数视为存储过程,并且我还建议始终使用模式前缀 - 对于函数而言,这是非常重要的!使用dbo.GetValue - 而不仅仅是GetValue

您的代码将如下所示:

using (SqlConnection conn = new SqlConnection("-your-conn-string-here-"))
using (SqlCommand cmd = new SqlCommand("dbo.GetValue", conn))
{
    cmd.Parameters.Add("@Time", SqlDbType.Int).Value = Days;

    // define a return value from the stored function
    cmd.Parameters.Add("@return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;

    // set type to be a stored procedure
    cmd.CommandType = CommandType.StoredProcedure;

    // open connection, execute non query        
    conn.Open();

    cmd.ExecuteNonQuery();

    // the return value parameter now contains the result 
    object returnValue = cmd.Parameters["@return"].Value;

    // close connection
    conn.Close();
}