Member 13199147 Ответов: 1

Вопрос относительно классов C# для регистрации пользователя


Hi, I am new learning C# and trying to create sql server database. For that I have created a User class and Database class. My problem is if I try to signup a new user, database does not get any data. Can anyone please help me figure out what I am missing.

Here is the code
**User Class**
public class UserDB
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Gender { get; set; }
        public string PhoneNo { get; set; }
        public string Email { get; set; }
        public string DateofBirth { get; set; }

    }

**Database Class**
{
    public class Database : UserDB
    {
        public SqlConnection conn;
        public SqlCommand Cmd;
        public SqlDataReader dr;
        private DataTable dt;


        public Database()
        {

            conn = new SqlConnection(@"Data Source=DESKTOP;Initial Catalog=Login_DB;Integrated Security=True");

        }
        public int Register(UserDB user)
        {
            int code = 1;
            try
            {
                using (SqlCommand command = new SqlCommand(
                        "INSERT INTO UserDB(Name, Password, Gender, Phone, Email, DOB) VALUES(username, password, gender, phoneno, email, dateofbirth, )", conn))
                {
                    
                    command.Parameters.Add(new SqlParameter("UserName", UserName));
                    command.Parameters.Add(new SqlParameter("Password", Password));
                    command.Parameters.Add(new SqlParameter("Gender", Gender));
                    command.Parameters.Add(new SqlParameter("PhoneNo", PhoneNo));
                    command.Parameters.Add(new SqlParameter("Email", Email));
                    command.Parameters.Add(new SqlParameter("DateofBirth", DateofBirth));
                    
                    command.ExecuteNonQuery();
                }
            }
            catch (SqlException ex)
            {
                code = -1;
            }
            return code;
        }

    }

**Registration Page**
 public sealed partial class RegPage : Page
    {
       Database db;
               
        public RegPage()
        {
            this.InitializeComponent();
            
        }


        private void BtnSubmit_Click(object sender, RoutedEventArgs e)
        {

            int code =1;
            UserDB user = new UserDB();
            {
                user.UserName = Username.Text.Trim();
                user.Password = Password.Password;
                user.PhoneNo = PhoneNo.Text.ToString();
                user.Email = Email.Text.Trim();
                user.DateofBirth = DateofBirth.ToString();

            };
            if (code == -1)
            {
                var message = new MessageDialog("Register failed");
                //await message.ShowAsync();
            }
            else
            {
                var message = new MessageDialog("Register success");
                
                this.Frame.Navigate(typeof(MainPage));
            }
        }
    }


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

различные онлайн-форумы и онлайн-уроки

1 Ответов

Рейтинг:
5

OriginalGriff

Измените на это:

using (SqlCommand command = new SqlCommand(
        "INSERT INTO UserDB(Name, Password, Gender, Phone, Email, DOB) VALUES(@username, @password, @gender, @phoneno, @email, @dateofbirth)", conn))
{

    command.Parameters.Add(new SqlParameter("@UserName", user.UserName));
    command.Parameters.Add(new SqlParameter("@Password", user.Password));
    command.Parameters.Add(new SqlParameter("@Gender", user.Gender));
    command.Parameters.Add(new SqlParameter("@PhoneNo", user.PhoneNo));
    command.Parameters.Add(new SqlParameter("@Email", user.Email));
    command.Parameters.Add(new SqlParameter("@DateofBirth", user.DateofBirth));

    command.ExecuteNonQuery();
}
Но где-то вам также нужно открыть объект SqlConnection!

И это очень важно:
1) DateOfBirth не должен быть строкой! Вы должны использовать TryParse для преобразования пользовательского ввода в объект DateTime и сохранить его в своем пользовательском классе вместо этого - и передать преобразованное значение SQL для хранения в столбце DATE или DATETIME, а не в столбце NVARCHAR или VARCHAR. Если вы этого не сделаете, у вас возникнут огромные проблемы, когда вы начнете использовать данные позже.
2) Никогда не храните пароли в открытом тексте - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]- Я знаю, что это, вероятно, немного продвинуто для вас, но очень важно получить правильные идеи и привычки как можно раньше! Хранение незашифрованных паролей-это CodeCrime[^]