错误提示:此 SqlParameterCollection 中未包含带有 ParameterName“result”的 SqlParameter。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.IndexOutOfRangeException: 此 SqlParameterCollection 中未包含带有 ParameterName“result”的 SqlParameter。
源错误: 
private void Button1_Click(object sender, System.EventArgs e)
{string procedurename="user_usernameanduseremail_check_procedure";
SqlConnection myConnection=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionSqlServer"]);
SqlCommand mysqlcommand = new SqlCommand(procedurename,myConnection);
mysqlcommand.CommandType = CommandType.StoredProcedure;
SqlParameter mysqlparameter;
mysqlparameter = mysqlcommand.Parameters.Add("@username", SqlDbType.Char, 15);
mysqlparameter.Direction = ParameterDirection.Input;
mysqlcommand.Parameters["@username"].Value=userID.Text;
mysqlparameter = mysqlcommand.Parameters.Add("@useremail", SqlDbType.VarChar, 50);
mysqlparameter.Direction = ParameterDirection.Input;
mysqlcommand.Parameters["@useremail"].Value=useremail.Text;
mysqlparameter = mysqlcommand.Parameters.Add("@result", SqlDbType.Int,4);
mysqlparameter.Direction = ParameterDirection.Output;
try
{
myConnection.Open();
mysqlcommand.ExecuteNonQuery();
int intresult;
intresult=(int)mysqlcommand.Parameters["result"].Value;
if (intresult==-1)
{
string themessage = "你输入的用户名或者电子邮箱已经存在 请改变输入!";
message.Text=themessage;
}
myConnection.Close();
}
catch
{
e.ToString();
}
}

解决方案 »

  1.   

    CREATE PROCEDURE user_usernameanduseremail_check_procedure
    @username char(15),
    @useremail varchar(50),
    @result integer output as
    begin 
    select username,useremail from user_info where useremail=@useremail and username=@username
    if @@ROWCOUNT<>0
    select @result=-1
    return @result 
    end 
    GO
      

  2.   

    intresult=(int)mysqlcommand.Parameters["result"].Value;
    改成
    intresult=(int)mysqlcommand.Parameters["@result"].Value;
      

  3.   

    即然是输出参数,就不要再用return @result返回来了.直接在代码里写上output就行
    行了:最重要的一点是:你有一行代码写错了(是你大意了):
    mysqlparameter = mysqlcommand.Parameters.Add("@result", SqlDbType.Int,4);
    mysqlparameter.Direction = ParameterDirection.Output;
    你上面这两行代码,把指定的输出参数就不是一个参数.换句话说就是参数"@result"还是输入参数可是存储过程里有吗?(你自己去看看)mysqlparameter = mysqlcommand.Parameters.Add("@result", SqlDbType.Int,4);
    mysqlparameter["@result"].Direction = ParameterDirection.Output;
    这两行才把一个参数指定为输出参数.
    错误原因:
    因为代码调用存储过程的时候,而存储过程里就没有@result的输入参数,所以会报告"未包含带有 ParameterName“result”的 SqlParameter"
      

  4.   

    当我的数据库里面存在记录时 
    string themessage = "你输入的用户名或者电子邮箱已经存在 请改变输入!";
    message.Text=themessage;
    这个信息不能通过label  显示出来 为什么?
      

  5.   

    原来是我搞错了,还写了半天,楼主别听我的,听zhenglei81() ( ) 这位兄台的吧!
      

  6.   

    当我的数据库里面存在记录时 
    string themessage = "你输入的用户名或者电子邮箱已经存在 请改变输入!";
    message.Text=themessage;
    这个信息不能通过label  显示出来 为什么?