我想要做一个用户注册的网页,在网页上要用户输入用户名密码什么的,然后将他们保存到数据库中,我利用了存储过程:
CREATE PROCEDURE useradd 
@UID varchar,
@UPassword varchar,
@UPower int,
@USex bit,
@UCityID int,
@Email varchar,
@UQuestion varchar,
@UAnswer varchar
AS
insert into Users(UID,UPassword,UPower,USex,UCityID,Email,UQuestion,UAnswer)values
(@UID,
@UPassword,
2,
@USex,
@UCityID,
@Email,
@UQuestion,
@UAnswer)
GO
在程序中写的代码:
            SqlCommand cm = new SqlCommand("useradd", cn);
            cm.CommandType = CommandType.StoredProcedure;
            cm.Parameters.Add("@UID", SqlDbType.VarChar);
            cm.Parameters["@UID"].Value = TextBox_UID.Text.ToString();
            cm.ExecuteNonQuery();
上面我省略了其他数据的输入,反正都是差不多的代码.可是比如我在用户名中输入:qwer,写到sql数据库里面的只有第一个字符q,其他数据也是这样,只有UPower这种int类型的数据你输入20,数据库里面存储的就是20,而其他的varchar都只能存储第一个字符,这是为什么呀?

解决方案 »

  1.   

    如果是非固定长度的数据类型,要加上长度,如:@UID varchar(20),
      

  2.   

    CREATE PROCEDURE useradd 
    @UID varchar,
    @UPassword varchar,
    @UPower int,
    @USex bit,
    @UCityID int,
    @Email varchar,
    @UQuestion varchar,
    @UAnswer varchar
    AS
    insert into Users(UID,UPassword,UPower,USex,UCityID,Email,UQuestion,UAnswer)values
    (@UID,
    @UPassword,
    2,
    @USex,
    @UCityID,
    @Email,
    @UQuestion,
    @UAnswer)
    GO
    中varchar型得写个长度呀,如varchar(50)
      

  3.   

    @UID varchar(50)  这样才可以!
      

  4.   

    变长字符类型,如 varchar,nvarchar, 不声明长度, 默认为 1