我写了一个申请会员帐号的页面,在SQL2000里面定义了一个过程,可是当我按了网页上“提交”按钮向数据库写信息的时候,它告诉我{"过程 'useradd' 需要参数 '@UPower',但未提供该参数。"}我搞了2个通宵了!求求你们帮帮我吧。小弟一定感恩戴德!下面是我的过程和函数!!
[seradd过程如下:]
CREATE PROCEDURE useradd
@UID varchar,
@UPassword varchar,
@UQuestion varchar,
@UAnswer varchar,
@UPower int,
@USex bit,
@UCityID int,
@Email varchar
AS
insert into Users(UID,UPassword,UQuestion,UAnswer,UPower,USex,UCityID,Email)values
(@UID,@UPassword,@UQuestion,@UAnswer,2,@USex,@UCityID,@Email)
GO调用过程函数如下:
 if (Page.IsValid)
        {
            //从文件 Web.config 中读取连接字符串
            string strconn = ConfigurationManager.ConnectionStrings["dsn"].ConnectionString;
            //连接本地计算机的 MMS 数据库
            SqlConnection cn = new SqlConnection(strconn);
            cn.Open();
            //利用 Command 对象调用存储过程
            SqlCommand cm = new SqlCommand("useradd", cn);
            //将命令类型转为存储类型
            cm.CommandType = CommandType.StoredProcedure;
            //添加并给参数赋值
            cm.Parameters.Add("@UID", SqlDbType.VarChar);
            cm.Parameters.Add("@UPassword", SqlDbType.VarChar);
            cm.Parameters.Add("@UQuestion", SqlDbType.NVarChar);
            cm.Parameters.Add("@UAnswer", SqlDbType.NVarChar);
            cm.Parameters.Add("@USex", SqlDbType.Bit);
            cm.Parameters.Add("@UCityID", SqlDbType.Int);
            cm.Parameters.Add("@Email", SqlDbType.VarChar);
            cm.Parameters["@UID"].Value = tbx_uid.Text.ToString();
            cm.Parameters["@UPassword"].Value = tbx_password.Text.ToString();
            cm.Parameters["@UQuestion"].Value = tbx_uquestion.Text.ToString();
            cm.Parameters["@UAnswer"].Value = tbx_uanswer.Text.ToString();
            if (rtn_male.Checked) cm.Parameters["@USex"].Value = 1;
            if (rtn_female.Checked) cm.Parameters["@USex"].Value = 0;
            cm.Parameters["@UCityID"].Value = ddl_ucityid.SelectedItem.Value;
            cm.Parameters["@Email"].Value = tbx_uemail.Text.ToString();
            
            cm.ExecuteNonQuery();
            cm.Parameters.Clear();            //关闭连接
            cn.Close();
            Response.Redirect("registersuccess.aspx");
        }

解决方案 »

  1.   

    @UPower int 你好像没用呀??insert into Users(UID,UPassword,UQuestion,UAnswer,UPower,USex,UCityID,Email)values
    (@UID,@UPassword,@UQuestion,@UAnswer,2,@USex,@UCityID,@Email)在插入内你用了2,就不用在给前面加入需要输入参数UPower int了!!
      

  2.   

    cm.Parameters.Add("@UPower", SqlDbType.Int);
    cm.Parameters["@UPower"].Value = 你的值!
      

  3.   

    cm.Parameters.Add("@UPower", SqlDbType.Int);
    cm.Parameters["@UPower"].Value = 你的值!
    --------------------------------
    它告诉我{"过程 'useradd' 需要参数 '@UPower',但未提供该参数。"}我搞了2个通宵了!真有你的,都明确提示了还搞了两个通宵???
      

  4.   

    cm.Parameters.Add("@UPower", SqlDbType.Int);
    cm.Parameters["@UPower"].Value = 你的值!
    服了,呵呵。你上面的代码写错了。
    有两个.Parameters["@UPassword"].Value = tbx_password.Text.ToString();
      

  5.   

    现在还有个问题 就是我每次把信息输入进去,现在倒是可以正常进入 成功登录的页面。但是当我进users表中查看时,每个用户信息都只有前一个字母.比如说我申请的帐号如下:
    用户名:12345
    密码:12345
    密码提示问题:12345
    答案:12345
    电子邮件:12345
    但是users表中的上述这些项全部只有开头第一个字母!!而且当我用汉字来当密码提示问题和答案时 甚至 变成了在表中的密码提示问题和答案都为空了!!
    大家帮帮忙吧!!!谢谢 在线等!!!!
      

  6.   

    @UID varchar,
    @UPassword varchar,
    @UQuestion varchar,
    @UAnswer varchar,
    @Email varchar
    你所有声明为varchar的字段都没有指定大小(长度)
    varchar(50)默认是50,主要还是看你数据库中表定义的相应的字段的大小
      

  7.   

    to:那我应该怎么改呢??
    如:
    cm.Parameters.Add("@UID", SqlDbType.NVarChar,50);
                cm.Parameters.Add("@UPassword", SqlDbType.NVarChar,50);