日期:2014-05-18  浏览次数:20789 次

存储过程的参数传递问题?
我用下面的命令调用有out参数的存储过程,     是可以正确执行的。

      SqlParameter[]   commandParameters   =   new   SqlParameter[2];
                commandParameters[0]   =   new   SqlParameter( "@serviceid ",   SqlDbType.Int);
                commandParameters[0].Value   =   0;
                commandParameters[0].Direction   =   ParameterDirection.Output;
                commandParameters[1]   =   new   SqlParameter( "@pcid ",   SqlDbType.Int);
                commandParameters[1].Value   =   0;
                commandParameters[1].Direction   =   ParameterDirection.Output;
                Database.ExecuteNonQuery(CommandType.StoredProcedure,   "getfreePcidandServiceid ",   commandParameters);
                serviceid   =   (int)   (commandParameters[0].Value);
                pcid   =   (int)(commandParameters[1].Value);

可是这样有弊病:
一是参数数组大小必须定义好,
二是取得out参数的值要用数组顺序,不方便。如commandParameters[1].Value

有没有好的获得out参数的值的方法?


------解决方案--------------------
没错,你那样不行,得用当前的SqlCommand对象Parameters去获取
不知道你Database类里怎么写的
实际上你需要在Database类里公开SqlCommand对象.
给你一个代码参考下:
using (SqlConnection connection = new SqlConnection(SqlConnstr))
{
connection.Open();
SqlCommand command = BuildIntCommand(connection,storedProcName, parameters );
command.ExecuteNonQuery();
return (int)command.Parameters[ "ReturnValue "].Value;
}
你要返回多个的话,就最好公开SqlCommand对象