小弟刚学.net,遇到下面的一串代码,看了半天看不明白,希望高手们帮忙解释一下,先谢过了private SqlCommand MakeCommand(string procName, SqlParameter[] prams) 
{
///打开数据库连接
Open();

///设置Command
SqlCommand cmd = new SqlCommand(procName, myConnection);
cmd.CommandType = CommandType.StoredProcedure; ///添加把存储过程的参数
if (prams != null) 
{
    foreach (SqlParameter parameter in prams)
    {
       cmd.Parameters.Add(parameter);
    }
}

///添加返回参数ReturnValue
cmd.Parameters.Add(new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty, DataRowVersion.Default,null)); ///返回创建的SqlCommand对象
return cmd;
}小弟主要有以下几个地方不明白
foreach (SqlParameter parameter in prams)
    {
       cmd.Parameters.Add(parameter);
    }
这串代码已经将参数加到cmd的Parameter中了
为什么后面又有cmd.Parameters.Add(new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty, DataRowVersion.Default,null));
好像又将参数加了一遍,而且这串代码是最看不明白的,RETURNVALUE不知道是什么东西麻烦大家各位高手详细说一下,这段代码看了二天了,死活看不明白
不好意思,麻烦各位了

解决方案 »

  1.   

    很简单,这是一个有返回值的存储过程,也就是这个存储过程的最后一句为return intVal 这样,返回一个int型的值。如果没有返回值,用foreach遍历将参数传进去就行了,但是有返回值就你得加一个接收返回值的参数,也就是cmd.Parameters.Add(new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty, DataRowVersion.Default,null));这句。有的存储过程中有output时,也一样得弄相应的output参数接收,这基本是一个公式型的写法,没啥技巧,楼主上MSDN查一下就一清二楚了。