我想先检查用户是否存在,所以我在SQL Server中创建了一个存储过程来检查。
CREATE PROCEDURE Login
@username varchar(20),
@password varchar(20),
@status int output
AS
IF EXISTS (SELECT username, password
FROM SystemUser
WHERE username = @username AND password = @password)
SET @status = 1
ELSE
SET @status = 0
然后,使用ASP。. NET Webforms,我正在为用户创建一个登录页面
protected void login(object sender, EventArgs e)
{
String connstr = WebConfigurationManager.ConnectionStrings["Sports"].ToString();
SqlConnection conn = new SqlConnection(connstr);
String username = txt_Username.Text;
String password = txt_password.Text;
SqlCommand login = new SqlCommand("userLogin", conn);
login.CommandType = CommandType.StoredProcedure;
login.Parameters.Add(new SqlParameter("@username", username));
login.Parameters.Add(new SqlParameter("@password", password));
SqlParameter loginstatus = login.Parameters.Add("@status", SqlDbType.Int);
loginstatus.Direction = ParameterDirection.Output;
conn.Open();
login.ExecuteNonQuery();
conn.Close();
if (loginstatus.GetInt32 == 1)
{
Response.Write("hello");
Response.Redirect("Home.aspx");
}
}
但是,我得到一个错误:
错误CS1061 'SqlParameter'不包含'GetInt32'的定义,并且没有可访问的扩展方法'GetInt32'接受类型'SqlParameter'的第一个参数可以找到(您是否缺少using指令或程序集引用?)
知道如何比较if条件下存储过程的输出吗?
Thanks in advance
我尝试了不同类型的方法,如.value
。希望知道如何将值与int型进行比较。
您可以使用.Value
if ((int)loginstatus.Value == 1)
{
...
}
你的代码中还有其他问题。
您将密码以明文形式存储在数据库表中。
请使用using
和SqlConnection
自动处理,SqlCommand
的注释相同。
和在声明变量时请使用有意义的名称,如SqlCommand login
。login
这个名字很不清楚。应该是command
或者sqlCommand