首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

存储过程 指定的参数太多,该怎么处理

2012-04-05 
存储过程 指定的参数太多为过程或函数InsertRole(存储过程名)指定的参数太多。说明:执行当前Web请求期间,出

存储过程 指定的参数太多
为过程或函数   InsertRole   (存储过程名)指定的参数太多。  
说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  

异常详细信息:   System.Data.SqlClient.SqlException:   为过程或函数   InsertRole   指定的参数太多。


不知道为什么,请多指教?

存储过程:
create   proc   InsertRole  
                        @RoleName   nvarchar(50),
                        @rolepower   nvarchar(300),
                        @columnsetting   nvarchar(300)
as  
          declare   @a   integer

          select   @a=count(*)     from   News_Role   where         @RoleName   =@RoleName  
          if   @a   > 0
          Begin                

                return   0

          End
          Else
          Begin        

                insert   into   News_Role(RoleName,rolepower,columnsetting)   Values(@RoleName,@rolepower,@columnsetting)      


                return   @@Identity          

          end


GO

程序为:

                SqlConnection   con   =   CreateCon();
                SqlCommand   Rcmd   =   new   SqlCommand();
                Rcmd.CommandText   =   "InsertRole ";
                Rcmd.CommandType   =   CommandType.StoredProcedure;
                Rcmd.Connection   =   con;
                SqlParameter[]   Rparas   ={
                                                              new   SqlParameter( "@RoleName ",SqlDbType.NVarChar,50),
                                                              new   SqlParameter( "@rolepower ",SqlDbType.NVarChar,300),
                                                              new   SqlParameter( "@columnsetting ",SqlDbType.NVarChar,300),
                                                              new   SqlParameter( "@RetValue ",SqlDbType.Int),          


                };
                Rparas[0].Value=   RoleName;
                Rparas[1].Value=RolePower;
                Rparas[2].Value=ColumnSeting;
                Rparas[3].Value   =   ParameterDirection.ReturnValue;
                foreach   (SqlParameter   Rpara   in   Rparas)
                {
                        Rcmd.Parameters.Add(Rpara);
                }
                con.Open();
                Rcmd.ExecuteNonQuery();
                int   ReValue   =   Convert.ToInt32(Rcmd.Parameters[ "@RetValue "].Value.ToString(),   10);
                con.Close();
                return   ReValue;

[解决办法]
new SqlParameter( "@RoleName ",SqlDbType.NVarChar,50),
new SqlParameter( "@rolepower ",SqlDbType.NVarChar,300),
new SqlParameter( "@columnsetting ",SqlDbType.NVarChar,300),
new SqlParameter( "@RetValue ",SqlDbType.Int),

这里不是四个参数吗?你的存储过程只定义了三个参数!
[解决办法]
Rparas[3].Value = ParameterDirection.ReturnValue;
改成
Rparas[3].Direction= ParameterDirection.ReturnValue;

热点排行