先说一下存储过程:这是参数:
1.发表文章的用户的编号
2.文章标题
3.文章内容
4.文章所属栏目的编号
5.有效期
6.如果发表成功,返回该文章的唯一编号
返回值说明:
-1发生未知错误
0发表成功
1指定用户不存在
2存在同标题文章
3指定栏目不存在
4有效期不合规范
比如:
我成功发表了文章,返回了 文章编号 和 0 
@ArticleNO = 68
@RETURN_VALUE = 0
这是我写的c# 参数        SqlParameter[] parameters = {
                        new SqlParameter("@UserNO",SqlDbType.Int),
                        new SqlParameter("@Title",SqlDbType.NVarChar ,100),
                        new SqlParameter("@Content",SqlDbType.NVarChar),
                        new SqlParameter("@TopicNO",SqlDbType.TinyInt),
                        new SqlParameter("@Expire",SqlDbType.Int),
                        new SqlParameter("@ArticleNO",SqlDbType.Int),
                        new SqlParameter("@RETURN_VALUE",SqlDbType.Int)};        parameters[0].Value = 32;
        parameters[1].Value = "a2345555sf";
        parameters[2].Value = "adf24ad5555fad--fasf";
        parameters[3].Value = 1;
        parameters[4].Value = 1;
        parameters[5].Value = ParameterDirection.Output;
        parameters[6].Value = ParameterDirection.ReturnValue;
但是VS提示: 为过程或函数 Ins_Article 指定了过多的参数。
如果我删掉最后一个参数:        SqlParameter[] parameters = {
                        new SqlParameter("@UserNO",SqlDbType.Int),
                        new SqlParameter("@Title",SqlDbType.NVarChar ,100),
                        new SqlParameter("@Content",SqlDbType.NVarChar),
                        new SqlParameter("@TopicNO",SqlDbType.TinyInt),
                        new SqlParameter("@Expire",SqlDbType.Int),
                        new SqlParameter("@ArticleNO",SqlDbType.Int)};        parameters[0].Value = 32;
        parameters[1].Value = "a2345555sf";
        parameters[2].Value = "adf24ad5555fad--fasf";
        parameters[3].Value = 1;
        parameters[4].Value = 1;
        parameters[5].Value = ParameterDirection.Output;它只返回一个结果。请问上面这种情况怎么获取 2个返回值?

解决方案 »

  1.   

    parameters[5].Direction = ParameterDirection.Output; 
    parameters[6].Direction = ParameterDirection.ReturnValue; 多看MSDN,细心检查...
      

  2.   

            SqlParameter[] parameters = { 
                            new SqlParameter("@UserNO",SqlDbType.Int), 
                            new SqlParameter("@Title",SqlDbType.NVarChar ,100), 
                            new SqlParameter("@Content",SqlDbType.NVarChar), 
                            new SqlParameter("@TopicNO",SqlDbType.TinyInt), 
                            new SqlParameter("@Expire",SqlDbType.Int), 
                            new SqlParameter("@ArticleNO",SqlDbType.Int), 
                            new SqlParameter("@RETURN_VALUE",SqlDbType.Int)};         parameters[0].Value = 32; 
            parameters[1].Value = "a2345555sf"; 
            parameters[2].Value = "adf24ad5555fad--fasf"; 
            parameters[3].Value = 1; 
            parameters[4].Value = 1; 
            parameters[5].Value = ParameterDirection.Output; 
            parameters[6].Value = ParameterDirection.ReturnValue; 
    但是VS提示 : 为过程或函数 Ins_Article 指定了过多的参数。
      

  3.   

    你上面去掉了一个,总共为6个 new SqlParameter("@RETURN_VALUE",SqlDbType.Int)
    RETURN_VALUE是默认自带的
    你的参数个数是
    create proc ss
    @,,
    as
    这里面的参数,并不需要传递RETURN_VALUE
    除非你也加了这个参数接收值的时候用1楼的方法,
      

  4.   

    存储过程里有六个参数,你传的时候只需要传六个都可以了
    @a1,@a2,@a3,@a4,@a5,@a6,
    如果想得到@a5,@a6两个返回的值,
    把这两个都写成ParameterDirection.Output都可以了。
      

  5.   

    create procedure sp_Insert(
    @UserNo int,
    @Title nvachar(100),
    @Content nvarchar(250),
    @TopicNO int,
    @AriticleNO int
    )
    as
    declare @count int,@return int
    select @count=count(userNo) from t_Article where userNo=@UserNo
    if(@count>0)
    set @return=1--返回表示指定用户不存在
    else
    begin 
    select @count=count(title) from t_Article where title=@Title
    if(@count>0)
    set @return=2--返回表示同标题文章存在
    else
    begin
    select @count=count(topicNO) from t_Article where topicNO=@TopicNO
    if(@count==0)
    set @return=3--返回表示指定栏目不存在
    else
    begin
    --此处判断有效期是否和规范(if语句)
    --如果不合规范set @return=4
    else
    BEGIN TRANSACTION
    insert into t_Article values(@UserNo,@Title,@Content,@TopicNO,@AritcleNO)
    if(@@ERROR<>0)
    begin
    ROLLBACK TRANSACTION
    set @return=-1--返回表示插入失败
    end
    else
    begin
    COMMIT TRANSACTION
    set @return=0--返回表示插入成功
    end
    end
    end
    end
    return @return
      

  6.   

    后台程序
    SqlParameter[] parameters = { 
                            new SqlParameter("@UserNO",32), 
                            new SqlParameter("@Title","a2345555sf"), 
                            new SqlParameter("@Content","adf24ad5555fad--fasf"), 
                            new SqlParameter("@TopicNO",1), 
                            new SqlParameter("@Expire",1), 
                            new SqlParameter("@ArticleNO",1), 
                            new SqlParameter("@RETURN_VALUE",SqlDbType.Int)};         parameters[6].Direction = ParameterDirection.ReturnValue;
    然后执行 SqlCommand.ExecuteScalar();方法,要设置cmd.CommandType = CommandType.StoredProcedure;
    读取返回值
    string strTmp = cmd.Parameters["@return"].Value.ToString();
     switch (strTmp)            {                case "0":                    Console.WriteLine("添加成功");                    break;                case "1":                    Console.WriteLine("数据有重复");                    break;                case "-1":                    Console.WriteLine("数据操作失败");                    break;               ..            }