我写了一个申请会员帐号的页面,在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");
}
[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");
}
(@UID,@UPassword,@UQuestion,@UAnswer,2,@USex,@UCityID,@Email)在插入内你用了2,就不用在给前面加入需要输入参数UPower int了!!
cm.Parameters["@UPower"].Value = 你的值!
cm.Parameters["@UPower"].Value = 你的值!
--------------------------------
它告诉我{"过程 'useradd' 需要参数 '@UPower',但未提供该参数。"}我搞了2个通宵了!真有你的,都明确提示了还搞了两个通宵???
cm.Parameters["@UPower"].Value = 你的值!
服了,呵呵。你上面的代码写错了。
有两个.Parameters["@UPassword"].Value = tbx_password.Text.ToString();
用户名:12345
密码:12345
密码提示问题:12345
答案:12345
电子邮件:12345
但是users表中的上述这些项全部只有开头第一个字母!!而且当我用汉字来当密码提示问题和答案时 甚至 变成了在表中的密码提示问题和答案都为空了!!
大家帮帮忙吧!!!谢谢 在线等!!!!
@UPassword varchar,
@UQuestion varchar,
@UAnswer varchar,
@Email varchar
你所有声明为varchar的字段都没有指定大小(长度)
varchar(50)默认是50,主要还是看你数据库中表定义的相应的字段的大小
如:
cm.Parameters.Add("@UID", SqlDbType.NVarChar,50);
cm.Parameters.Add("@UPassword", SqlDbType.NVarChar,50);