Sale存储过程如下:
CREATE PROCEDURE Sale
@ID varchar(50),
@Name varchar(50)
AS 
select * from tUsersIndex
WHERE
fUserID = @ID
AND fUserName = @Name
GO原程序如下:
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Sale";//存储过程名SqlDataAdapter adapter = new SqlDataAdapter(cmd);

this.txtID.Text = cmd.Parameters["@ID"].Value.ToString();//传递参数
this.txtName.Text = cmd.Parameters["@Name"].Value.ToString();//adapter.SelectCommand  = cmd;
cmd.ExecuteNonQuery(); DataTable dt = new DataTable();
adapter.Fill(dt);if(dt.Rows.Count>0)
{
string str2 = dt.Rows[0]["fUserEmail"].ToString();
Response.Write(str2);//输出查看
}

con.Close();
执行程序时出现错误:异常详细信息: System.IndexOutOfRangeException: 此 SqlParameterCollection 中未包含带有 ParameterName“@ID”的 SqlParameter。
请大家帮忙看看!谢谢!!

解决方案 »

  1.   

    this.txtID.Text = cmd.Parameters["@ID"].Value.ToString();//传递参数
    this.txtName.Text = cmd.Parameters["@Name"].Value.ToString();//这就是赋值啊 !!
      

  2.   

    我就是把
    this.txtID.Text和this.txtName.Text这两个值赋给@ID和@Name的啊为什么不行呢???
      

  3.   

    你反过来了。应该这样
    cmd.Parameters["@ID"].Value=this.txtID.Text
    cmd.Parameters["@Name"].Value=this.txtName.Text
    而且你还缺少加入参数的语句
    cmd.Parameters.Add方法
      

  4.   

    cmd.Parameters.Add("@ID",值);
    cmd.Parameters.Add("@Name",值);
      

  5.   

    你这是把cmd.Parameters["@ID"].Value.ToString()这个值传给this.txtID.Text啊。这不是反了么?
    添加参数应该这样加:
    cmd.Parameters.Add("@ID",SqlDbType.NChar);//加入名为@ID类型为SqlDbType.NChar的参数。
    cmd.Parameters.Add("@Name",SqlDbType.NChar);//
    然后再
    cmd.Parameters["@ID"].Value = this.textID.Text;
      

  6.   

    谢谢大家  现在程序已经完善成这样了:
    con.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Sale";//存储过程名SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    cmd.Parameters.Add("@ID",SqlDbType.NVarChar);
    cmd.Parameters.Add("@Name",SqlDbType.NVarChar);cmd.Parameters["@ID"].Value = this.txtID.Text;//传递参数
    cmd.Parameters["@Name"].Value = this.txtName.Text;//adapter.SelectCommand  = cmd;
    cmd.ExecuteNonQuery(); DataTable dt = new DataTable();
    adapter.Fill(dt);if(dt.Rows.Count>0)
    {
    string str2 = dt.Rows[0]["fUserEmail"].ToString();
    Response.Write(str2);//输出查看
    }con.Close();
    但是还是报错:
    异常详细信息: System.InvalidOperationException: ExecuteReader: Connection 属性尚未初始化。
      

  7.   

    创建的SqlCommand对象要提供Connection属性。
    可以在构造函数里添加:SqlCommand cmd = new SqlCommand("Sale",con);
    也可以cmd构造好后:cmd.Connection = con;