存储过程语句:
create proc proc_SameDaySameTimeSameProduct
@USERNAME VARCHAR(25),
@SPBH VARCHAR(25),
@JFLX int,
@HYJFDTSJ DATETIME,
@Result int  output
AS
set @Result = (select count(*) 
from  dbo.HYGL_JFDT  
  where USERNAME=@USERNAME and SPBH=@SPBH and JFLX=@JFLX and datediff(dd,@HYJFDTSJ,getdate())=0)然后,动软DBUtility类下的一个方法如下        /// <summary>
        /// 执行存储过程,返回影响的行数
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="rowsAffected">影响的行数</param>
        /// <returns></returns>
        public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int        rowsAffected)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                int result;
                connection.Open();
                SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
                rowsAffected = command.ExecuteNonQuery();
                //存储过程返回值,(这个是预留以后用的)
                result = (int)command.Parameters["ReturnValue"].Value;
                connection.Close();
                return result;
            }
        }         /// <summary>
        /// 创建 SqlCommand 对象实例(用来返回一个整数值)
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>SqlCommand 对象实例</returns>
        private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
            command.Parameters.Add(new SqlParameter("ReturnValue",
                SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));
            return command;
        }
其中,result = (int)command.Parameters["ReturnValue"].Value;的"ReturnValue"怎么理解?
然后在DAL层调用,运用RunProcedure()方法???
在线等待

解决方案 »

  1.   

    result = (int)command.Parameters["ReturnValue"].Value;
    ReturnValue其实就是的参数,加上Value就是返回值你只需要在DAL层调用RunProcedure()来执行你的存储过程就行了!
      

  2.   

    我也是这样用的,但运行起来会报错:
    错误信息:
    过程或函数 'proc_SameDaySameTimeSameProduct' 需要参数 '@Result',但未提供该参数
    其中SameDaySameTimeSameProduct' 是我写的一个存储过程,@Result是一个带输出的参数因为动软生成的三层中DBUtility有一个
    public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected){;}这个方法
    其中paramters只的是存储过程中的输入参数,但我的要的是存储过程带输出参数怎么弄?
    如果直接在DAL层调用的话,编译不会不问题,但是执行功能就会报错的。李天平大哥肯定会想到带返回值的存储过程的处理的方法在DBUtility类中。???