【问题标题】:asp net check if username exists C# procedureasp net 检查用户名是否存在 C# 程序
【发布时间】:2014-07-17 16:14:25
【问题描述】:

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

程序:

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”,但未提供。

【问题讨论】:

  • 除了你的问题 - 你没有关闭conn。使用conn.Close() 或(更好的)using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString) { /* your code here */ }。即使它是一门很棒的语言,你仍然应该避免用波兰语编写函数名称;)

标签: c# asp.net database procedure exists


【解决方案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
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      消息告诉您问题所在。您需要添加一个名为IsExists 的参数,并将.Direction 设置为ParameterDirection.Output 或ParameterDirection.InputOutput,然后在执行命令之后检查该参数的.Value。附带说明一下,您也可以检查返回值,但您仍然需要添加一个名为 IsExists 的参数,并且单独添加一个方向为 @987654327 的参数@,所以这实际上会做更多的工作。

      使用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;
      

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 2011-02-20
        • 1970-01-01
        • 2013-11-29
        相关资源
        最近更新 更多