各位高手帮忙看下问题出在哪里 
  在下感激不尽 
  //*************// 
  //**************// 
  int retval = cmd.ExecuteNonQuery();//执行到这里提示“过程或函数 'sp_insertTemp' 需要参数 '@OUTNUM',但未提供该参数。” 
  //*************// 
  //**************// 
protected void btnSend_Click(object sender, EventArgs e) 
    { 
        DbParameter[] par ={ 
                              DbHelper.MakeInParam("@userid",(DbType)SqlDbType.Int,10,5), 
                              DbHelper.MakeOutParam("@output",(DbType)SqlDbType.Int,10) 
        }; 
        DbHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, "[dbo].[sp_insertTemp]", par); 
    } public static int ExecuteNonQuery(DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters) 
        { 
            if (connection == null) throw new ArgumentNullException("connection");             // 创建DbCommand命令,并进行预处理 
            DbCommand cmd = Factory.CreateCommand(); 
            bool mustCloseConnection = false; 
            PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection); 
            // 执行DbCommand命令,并返回结果. 
          //*************// 
          //**************// 
            int retval = cmd.ExecuteNonQuery();//执行到这里提示“过程或函数 'sp_insertTemp' 需要参数 '@OUTNUM',但未提供该参数。” 
          //*************// 
          //**************// 
            // 清除参数,以便再次使用. 
            cmd.Parameters.Clear(); 
            if (mustCloseConnection) 
                connection.Close(); 
            return retval; 
        } 
        public static DbParameter MakeInParam(string ParamName, DbType DbType, int Size, object Value) 
        { 
            return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value); 
        } 
        public static DbParameter MakeOutParam(string ParamName, DbType DbType, int Size) 
        { 
            return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null); 
        } 
        public static DbParameter MakeParam(string ParamName, DbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
        { 
            DbParameter param;             param = Provider.MakeParam(ParamName, DbType, Size); 
          
            param.Direction = Direction; 
            if (!(Direction == ParameterDirection.Output && Value == null)) 
                param.Value = Value;             return param; 
        }         /// <summary> 
        /// 将DbParameter参数数组(参数值)分配给DbCommand命令. 
        /// 这个方法将给任何一个参数分配DBNull.Value; 
        /// 该操作将阻止默认值的使用. 
        /// </summary> 
        /// <param name="command">命令名 </param> 
        /// <param name="commandParameters">DbParameters数组 </param> 
        private static void AttachParameters(DbCommand command, DbParameter[] commandParameters) 
        { 
            if (command == null) throw new ArgumentNullException("command"); 
            if (commandParameters != null) 
            { 
                foreach (DbParameter p in commandParameters) 
                { 
                    if (p != null) 
                    { 
                        // 检查未分配值的输出参数,将其分配以DBNull.Value. 
                        if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && 
                            (p.Value == null)) 
                        { 
                            p.Value = DBNull.Value; 
                        } 
                        command.Parameters.Add(p); 
                    } 
                } 
            } 
        } private static void PrepareCommand(DbCommand command, DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, out bool mustCloseConnection) 
        { 
            if (command == null) throw new ArgumentNullException("command"); 
            if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");             //如果数据库连接状态为关闭则打开它 
            if (connection.State != ConnectionState.Open) 
            { 
                mustCloseConnection = true; 
                connection.Open(); 
            } 
            else 
            { 
                mustCloseConnection = false; 
            }             // 给命令分配一个数据库连接. 
            command.Connection = connection;             // 设置命令文本(存储过程名或SQL语句) 
            command.CommandText = commandText;             // 分配事务 
            if (transaction != null) 
            { 
                if (transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction"); 
                command.Transaction = transaction; 
            }             // 设置命令类型. 
            command.CommandType = commandType;             // 分配命令参数 
            if (commandParameters != null) 
            { 
                AttachParameters(command, commandParameters); 
            } 
            return; 
        } 
SQL SERVER2005存储过程 create PROC [dbo].[sp_insertTemp](@UserId nvarchar(50), @OUTNUM int OUTPUT) 
AS 
BEGIN TRAN 
INSERT INTO [ZhangBY].[dbo].[temp]([as]) 
VALUES(@UserId) 
IF @@error <> 0 
  BEGIN 
  ROLLBACK TRAN 
  SELECT @OUTNUM=0 
  END 
ELSE 
BEGIN 
      COMMIT TRAN 
      SELECT @OUTNUM=1 
END

解决方案 »

  1.   

    DbParameter[] par ={ 
                                  DbHelper.MakeInParam("@userid",(DbType)SqlDbType.Int,10,5), 
                                  DbHelper.MakeOutParam("@OUTNUM",(DbType)SqlDbType.Int,10) 
            }; 
      

  2.   

    protected void btnSend_Click(object sender, EventArgs e) 
        { 
            DbParameter[] par ={ 
                                  DbHelper.MakeInParam("@userid",(DbType)SqlDbType.Int,10,5), 
                                  DbHelper.MakeOutParam("@OUTNUM ",(DbType)SqlDbType.Int,10) 
            }; 
            DbHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, "[dbo].[sp_insertTemp]", par); 
        } 
      

  3.   

    补充一下我用的是DZ!NT3.0的数据助手
      

  4.   

    protected void btnSend_Click(object sender, EventArgs e) 
        { 
            DbParameter[] par ={ 
                                  DbHelper.MakeInParam("@userid",(DbType)SqlDbType.Int,10,5), 
                                  DbHelper.MakeOutParam("@OUTNUM ",(DbType)SqlDbType.Int,10) 
            }; 
            DbHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, "[dbo].[sp_insertTemp]", par); 
        }