navi G Ответов: 1

Зарегистрируйтесь через форму ASP.NET с#


я создал регистрационную форму . но у меня с этим есть некоторые проблемы. поэтому я хочу, чтобы если введенное пользователем "имя пользователя" похоже или совпадает с существующей базой данных, то он покажет ошибку "имя пользователя уже существует, Пожалуйста, выберите другую вещь".
скажите, пожалуйста, как это сделать с помощью этого кода?

проще говоря, если новое имя пользователя уже существует в базе данных. это дает ошибку username is already exist.(спасибо)

Что я уже пробовал:

public partial class Registration : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection();
    protected void Page_Load(object sender, EventArgs e)
    {
        con.ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
        con.Open();
    }
    protected void RegisterButton_Click(object sender, EventArgs e)
    {
        
        String insertCmd = "insert into Register_Form values (@username,@email,@mobile_number,@pswrd)";
        SqlCommand myCommand = new SqlCommand(insertCmd, con);
        
        myCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.VarChar, 50));
        myCommand.Parameters["@usernamename"].Value = UserName.Text;
        
        myCommand.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 50));
        myCommand.Parameters["@email"].Value = Email.Text;
        myCommand.Parameters.Add(new SqlParameter("@mobile_number", SqlDbType.VarChar, 50));
        myCommand.Parameters["@mobile_number"].Value = Mobile.Text;
        myCommand.Parameters.Add(new SqlParameter("@pswrd", SqlDbType.VarChar, 50));
        myCommand.Parameters["@pswrd"].Value = Password.Text;

        try
        {
            myCommand.ExecuteNonQuery();
            
                StatusLabel.Text = "You are successfully Registerd. Now you can";
                HyperLink1.Text = "Log In";
            
        }
        catch (Exception ex)
        {

            Response.Write(ex.ToString());
            con.Close();

        }

F-ES Sitecore

Добавьте уникальное ограничение в таблицу username и проанализируйте исключение, которое возвращается при дублировании, чтобы увидеть, является ли это причиной исключения, и если да, то покажите соответствующую ошибку.

Или сделайте "select count (*) from register_form where username = @username" и посмотрите, будет ли результат >0.

navi G

спасибо, сэр, но, пожалуйста, отредактируйте мой код с помощью вашего решения, а затем вставьте его. для лучшего понимания.

1 Ответов

Рейтинг:
6

OriginalGriff

Начните с изменения способа обработки паролей: это очень небезопасно. Никогда не храните пароли в открытом тексте-это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]
Во-вторых, никогда не пытайтесь вставлять значения без указания имен столбцов:

INSERT INTO MyTable (MyColumn1, MyColumn2) VALUES (@C1, @c2)
Если вы измените свою базу данных,вы можете вставить неправильные значения в неправильные столбцы, если не укажете порядок. Кроме того, если ваша таблица начинается со столбца идентификаторов - что многие делают и по уважительной причине - вставка завершится неудачей, так как SQL попытается вставить их по порядку, и вы не сможете записать данные в поле идентификаторов. (Если вы не используете отдельное поле ID, это очень хорошая идея: таким образом, пользователь может изменить свое имя без необходимости обновлять все остальные записи, и гораздо эффективнее использовать INT или GUID в качестве внешнего ключа, чем строку)
Затем не пытайтесь просто вставить значение: проверьте, используется ли имя пользователя, запросив SQL:
using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM myTable WHERE UserName = @UN", con))
        {
        cmd.Parameters.AddWithValue("@UN", UserName.Text);
        int users = cmd.ExecuteScalar();
        if (users != 0)
            {
            // username in use
            ...
            }
        else
            {
            ...
            }
        }
    }


navi G

большое вам спасибо, OriginalGriff. Мне нравится ваша манера преподавать.

OriginalGriff

Пожалуйста!