我用下面的命令调用有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参数的值的方法?

解决方案 »

  1.   

    怎么用名字啊?
    难道用pcid = (int)(commandParameters[@pcid].Value);
    通不过的呀.
      

  2.   

    错了 ,是想说下面的通不过:
    pcid = (int)(commandParameters["@pcid"].Value);
      

  3.   

    没错,你那样不行,得用当前的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对象