【问题标题】:Check if user exists in database in ASP.NET检查用户是否存在于 ASP.NET 的数据库中
【发布时间】:2014-07-17 13:00:42
【问题描述】:

我的问题是我想检查注册页面中的用户名是否已经存在于数据库中以防止多个相同的名称但出现错误

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理

附加信息:“*”附近的语法不正确。

这是我的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)           //tworzymy Zapytanie wraz z połączeniem z bazą
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
            conn.Open();
            string sprawdz = "Wybierz count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
            SqlCommand com = new SqlCommand(sprawdz, conn);
            int temp = Convert.ToInt32((String)com.ExecuteScalar().ToString());  <----The error moment
            if(temp==1)
            {
                Response.Write("Uzytkownik o podanej nazwie już istnieje.");
            }
            conn.Close();
        } 

请问,谁能帮帮我?

【问题讨论】:

  • 据我所知,T-SQL中没有Wybierz statement

标签: c# asp.net database exists


【解决方案1】:

尝试替换

string sprawdz = "Wybierz count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";

string sprawdz = "select count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";

我不是波兰语,但在谷歌上查到 Wybierz 是波兰语,意思是选择 (Link)

从逻辑和句法上来说应该选择不是Wybierz

【讨论】:

    【解决方案2】:

    在这种情况下,我建议使用 SQL 为每个 存储过程 执行此操作。

    为什么? 存储过程编译一次并以可执行形式存储,因此过程调用快速高效。可执行代码会自动缓存并在用户之间共享。这降低了内存需求和调用开销。

    所以代码如下:

    SqlCommand cmd = new SqlCommand("CheckIfUserExists",conn);
    cmd.CommandType=CommandType.StoreProcedure;
    cmd.Parameters.AddWithValue("@UserName",un.Text);
    cmd.Parameters.AddWithValue("@IsExists",0);
    int rowAffected=cmd.ExecuteNonQuery();
    // rowAffected contains your Result
    

    这样的程序:

    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
    

    希望我用波兰语做对了。

    【讨论】:

    • 附加信息:过程或函数“CheckIfUserExists”需要参数“@UserName”,但未提供该参数。我添加了程序,它会在我单击注册页面上的事件按钮时显示。
    • 更改了 cmd.Parameters.AddWithValue("@UserName",un.Text);
    • 附加信息:过程或函数“CheckIfUserExists”需要参数“@IsExists”,但未提供。
    • 添加行:cmd.Parameters.AddWithValue("@IsExists",0);
    • 具体在哪里?因为当我在查询开始后添加它时,无论它到底是什么,它都会将 @IsExists 设置为 0?
    猜你喜欢
    • 2013-06-24
    • 2013-08-31
    • 2021-12-15
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2016-03-01
    相关资源
    最近更新 更多