asp net检查用户名是否存在C#程序

时间:2014-05-28 12:29:16

标签: c# asp.net database procedure exists

我创建了Procedure并将其添加到Load页面,我的代码现在看起来像这样:

步骤:

CREATE PROCEDURE  CheckIfUserExists   
(    
    @UserName Varchar(50),  
    @IsExists INT OUTPUT   
)   
AS      

If exists (select Nazwa_uzytkownika from Uzytkownicy where Nazwa_uzytkownika = @UserName)   
Begin

Set @IsExists = 1

End     
Else   
begin

Set @IsExists = 0

End

Return @IsExists

代码:

namespace Komis_Samochodowy1
{
    public partial class Rejestracja : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
            conn.Open();

            SqlCommand cmd = new SqlCommand("CheckIfUserExists", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@UserName", un.Text);
            **int rowAffected = cmd.ExecuteNonQuery();**    //Error

            if (rowAffected == 1)
            {
                status.Visible = true;
                status.Text = "Uzytkownik istnieje.";
            }
        }
        protected void Button4_Click(object sender, EventArgs e)
        {
            Response.Redirect("Login.aspx");
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Redirect("Main.aspx");
        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            Response.Redirect("AboutMe.aspx");
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("Offer.aspx");
        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            Response.Redirect("Registration.aspx");
        }

        protected void Button7_Click(object sender, EventArgs e)
        {

            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
            conn.Open();
            string dodajQuery = "insert into Uzytkownicy (Nazwa_uzytkownika, Kraj, Hasło, Email) values (@Unazwa, @ukraj, @uhasło, @uemail) ";
            SqlCommand com = new SqlCommand(dodajQuery, conn);
            com.Parameters.AddWithValue("@Unazwa", un.Text.ToString());
            com.Parameters.AddWithValue("@ukraj", country.SelectedItem.ToString());
            com.Parameters.AddWithValue("@uhasło", pass.Text.ToString());
            com.Parameters.AddWithValue("@uemail", email.Text.ToString());
            com.ExecuteNonQuery();

            Response.Redirect("Login.aspx");
            Response.Write("Rejestracja zakonczona.");
            conn.Close();


        }
    }
}

仍然根本不起作用,每次都用螺栓固定部分粉碎,我做错了什么?

附加信息:过程或函数'CheckIfUserExists'需要参数'@IsExists',这是未提供的。

3 个答案:

答案 0 :(得分:1)

cmd.Parameters.AddWithValue("@UserName", un.Text);
var outparam = new SqlParameter("@IsExist", SqlDbType.Int);
outparam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outparam);
int rowAffected = cmd.ExecuteNonQuery();

if ((int)outparam.Value == 1)
{
    // user exists
}
else
{
    // user does not exist
}

答案 1 :(得分:0)

该消息告诉您问题。您需要添加一个名为IsExists的参数,.Direction设置为ParameterDirection.OutputParameterDirection.InputOutput,然后检查之后的.Value 你已经执行了命令。作为旁注,您还可以检查返回值,但是仍然需要添加名为IsExists的参数,单独添加带方向的参数ReturnValue,这实际上可以带来更多的工作。

很多更容易使用select结果的sql方法,而不是return结果或使用output参数。然后你可以使用ExecuteScalar

请注意,ExecuteNonQuery的返回值与查询的返回值相同。是的,这听起来很奇怪。

cmd.Parameters.AddWithValue("UserName", un.Text);
var isExists = cmd.Parameters.Add("IsExists", SqlDbType.Int);
isExists.Value = DBNull.Value;
isExists.Direction = ParameterDirection.InputOutput;
cmd.ExecuteNonQuery();
bool exists = (int)isExists.Value == 1;

答案 2 :(得分:0)

你需要添加缺少的输出参数和方向,请尝试这样做。我没有检查语法:

cmd.Parameters.Add("@IsExists", SqlDbType.bool);
    cmd.Parameters["@IsExists"].Direction = ParameterDirection.Output;