我的调用函数(BLL层)
public static int Add(MODEL.M_Users m)
{
    string str = "dbo.SaveUsers";
    SqlParameter[] sqlParameter ={ 
        new SqlParameter("@UserID",m.UserID),
        new SqlParameter("@Name", m.Name),
        new SqlParameter("@Pwd", m.Pwd),
        new SqlParameter("@Address", m.Address),
        new SqlParameter("@Tele",m.Tele),
        new SqlParameter("@Email",m.Email),
        new SqlParameter("@CreatTime", m.CreatTime),
        new SqlParameter("@Power", m.Power)
    };    try
    {
        DAL.DAL dal = new DAL.DAL();
        return dal.Add(str,sqlParameter);
    }
    catch (SqlException ex)
    {
        throw ex;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}连接数据库的函数(DAL层)
public int Add(string str, SqlParameter[] sql)
{
    try
    {
        using (SqlConnection sqlConnection = new SqlConnection())
        {
            sqlConnection.ConnectionString = DBcon;
            sqlConnection.Open();
            SqlCommand sqlCommand = new SqlCommand(str, sqlConnection);
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddRange(sql);
            sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
            sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
            sqlCommand.ExecuteNonQuery();
            int newid = Convert.ToInt32(sqlCommand.Parameters["@ResultID"].Value);
            return newid;
        }
    }
    catch (Exception E)
    {
        throw E;
    }
}红色部分报错:
过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。

解决方案 »

  1.   

    补上存储过程:
    ALTER PROCEDURE [dbo].[SaveUsers] 
    @UserID int,
    @Name varchar(30),
    @Pwd varchar(20),
    @Address varchar(50),
    @Tele varchar(20),
    @Email varchar(30),
    @CreatTime datetime,
    @Power int,
    @ResultID int output
    AS
    BEGIN TRAN SAVEUSERS
    IF @UserID=0
    --创建新用户
    BEGIN
    INSERT INTO [dbo].[Users] (
    [Name],
    Pwd,
    Address,
    Tele,
    Email,
    CreatTime,
    [Power]
    )VALUES
    (@Name,
    @Pwd,
    @Address,
    @Tele,
    @Email,
    getdate(),
    @Power
    )
    select @ResultID=@@IDENTITY
    END
    ELSE 
    --更新信息
    BEGIN
    UPDATE [dbo].[Users]
    SET [Name]=@Name,
    Pwd=@Pwd,
    Address=@Address,
    Tele=@Tele,
    Email=@Email
    WHERE UserID=@UserID
    select @ResultID=@UserID
    END
    COMMIT TRAN SAVEUSERS不知道哪里错了,大侠们救命啊!
      

  2.   

    dbo.SaveUsers 是存储过程哦? 贴出来瞧瞧
      

  3.   

    提示不是很明显的嘛, 缺少一个返回的参数 ResultID
    在参数数组中再添加一个
         new SqlParameter("@ResultID", sqlDataType.int)
      

  4.   

     string str = "dbo.SaveUsers";
      

  5.   

    SqlParameter[] sql
    这个数组参数里面有@ResultID吗?
    打断点检查一下
      

  6.   

    断点 设置 sqlCommand.ExecuteNonQuery(); 这里调试下,看看 SqlParameter 数组对不对
      

  7.   

    断点 设置 sqlCommand.ExecuteNonQuery(); 这里调试下,看看 SqlParameter 数组对不对
      

  8.   

    我在DAL中有添加@Result啊……
    sqlCommand.Parameters.AddRange(sql);
    sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
    sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
    ……
      

  9.   

    我做的是网站,所以一调试就是弹出网页,然后就是报错,不知道怎么查看SqlParameter[] 数组
      

  10.   

     
     设置断点调试看看
     SqlConnection Conn;
                Conn = new SqlConnection(ConnStr);
                Conn.Open();
                SqlCommand Cmd = new SqlCommand(procName, Conn);
                Cmd.CommandType = CommandType.StoredProcedure;
                if (prams != null)
                {
                    foreach (SqlParameter parameter in prams)
                        Cmd.Parameters.Add(parameter);
                }
                Cmd.Parameters.Add(
                 new SqlParameter("ReturnValue", SqlDbType.Int, 4,
                 ParameterDirection.ReturnValue, false, 0, 0,
                 string.Empty, DataRowVersion.Default, null));
    Return Convert.ToInt32(cmd.Parameters("RETURN_VALUE").Value)
      

  11.   

    Return Convert.ToInt32(cmd.Parameters("ReturnValue").Value);
      

  12.   

    SqlParameter的Value值不能设置为C#中的null值,这样会让SqlParameter认为这个参数是没有的。
    如果要设置为空值,可以考虑一下是否是数据库中的 <NULL>值,如果是这个数据库的空值,可以这样来设置(示例): string sSql = "INSERT   INTO   tblItem(ItemNo,   ItemCode,   ISType)   VALUES(@ItemNo,   @ItemCode,   @ISType)";
    SqlParameter[] parameters =   { 
    new   SqlParameter("@ItemNo",   SqlDbType.VarChar,   16), 
    new   SqlParameter("@ItemCode",   SqlDbType.VarChar,   20), 
    new   SqlParameter("@ISType",   SqlDbType.VarChar,   16)};
    parameters[0].Value = "ITM001";
    parameters[1].Value = DBNull.Value;
    parameters[2].Value = DBNull.Value;
    cmd.CommandText = sSql;
    foreach (SqlParameter parm in parameters)
        cmd.Parameters.Add(parm);cmd.ExecuteNonQuery();
      

  13.   

    为什么不在BLL里把ResultID填进去?
      

  14.   

      把         sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
                sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
                sqlCommand.ExecuteNonQuery();
                int newid = Convert.ToInt32(sqlCommand.Parameters["@ResultID"].Value);     
    该成:        SqlParameter returnValue = sqlCommand.Parameters.Add("returnValue", SqlDbType.Int, 4);
            returnValue.Direction = ParameterDirection.ReturnValue;
                     int newid =   Convert.ToInt32(returnValue.Value.ToString());
      

  15.   

    刚才没看你的存储过程 还以为是有返回值 既然是有  输出参数 
    该这里sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.outPut;
      

  16.   

    Add("returnValue", SqlDbType.Int, 4)中的4是什么意思啊
      

  17.   

    依你现在的存储过程来看,修改以下的的即可:
    sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
    -->
    sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.Output;ouput是输出,returnvalue是返回的值,也就是接收在存储过程中return '你想要的数据'要得到这个值,代码可如下:
    sqlCommand.Parameters.Add("RETURN_VALUE", SqlDbType.Int);
    sqlCommand.Parameters["RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
    string myreturn = cm.Parameters["RETURN_VALUE11"].Value;注:RETURN_VALUE自定义,存储过程只要有return '你的数据'就可以了。
      

  18.   


    4 是returnValue的长度可以不写这我没看清 你是有输出参数的而不是返回值 应该改成sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.outPut