SQL Server 如何比较存储过程的输出?

vbopmzt1  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(193)

我想先检查用户是否存在,所以我在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.NETWebforms为用户创建一个登录页面

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"的定义,并且找不到接受"SqlParameter"类型的第一个参数的可访问扩展方法"GetInt32"(是否缺少using指令或程序集引用?)
知道如何比较if条件下存储过程的输出吗?
先谢了
我尝试了不同类型的方法,比如.value,希望知道如何将值与int进行比较。

8xiog9wr

8xiog9wr1#

可以使用.Value获取该值

if ((int)loginstatus.Value == 1)
{
    ...
}

您的代码中还存在其他问题。
您将密码以纯文本形式存储在数据库表中。
请将usingSqlConnection一起使用以自动处理,SqlCommand的注解相同。
并且请使用有意义的名字当声明变量象SqlCommand login .它是非常不清楚由这名字login .它应该是commandsqlCommand

相关问题