Как сгенерировать регистрационный номер (UserId) и отправить его пользователю по почте после регистрации? - PullRequest
0 голосов
/ 16 марта 2012

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

//Inserting registration data of user!!!
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegConnectionString"].ConnectionString);
string inscmd = "Insert into Registration(Username, Password,EmailAddress,FullName,CNIC,city) Values(@UserName, @Password, @EmailAddress, @FullName, @CNIC, @City)";
SqlCommand InsertUser = new SqlCommand(inscmd, con);
InsertUser.Parameters.AddWithValue("@UserName", TextBoxUN.Text);
InsertUser.Parameters.AddWithValue("@Password", TextBoxPass.Text);
InsertUser.Parameters.AddWithValue("@EmailAddress", TextBoxEA.Text);
InsertUser.Parameters.AddWithValue("@FullName", TextBoxFN.Text);
InsertUser.Parameters.AddWithValue("@CNIC", TextBoxCNIC.Text);
InsertUser.Parameters.AddWithValue("@City", DropDownListCity.SelectedItem.ToString());

try
{
    con.Open();
    //Response.Write("Trying ...");
    InsertUser.ExecuteNonQuery();
    con.Close();
}
catch(SqlException ex)
{
    Response.Write(ex.Message);
    Response.Write("Failed!!! ...");
    Response.Write("<b>Something really bad happened .. try again later</b>");
}

//send mail message after user fills registration form 
try                
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("motionvotersys@gmail.com");
    msg.To.Add(TextBoxEA.Text);
    msg.Subject = "Your Registration is confirmed! ";
    msg.Body = "Dear " + TextBoxFN.Text + " Your Registration to motion voter system has been confirmed. .. Kindly note down your Voter's Identity Number(VIN) required for your login";
    SmtpClient Sc = new SmtpClient("smtp.gmail.com");
    Sc.Port = 587;
    Sc.Credentials = new NetworkCredential("motionvotersys@gmail.com","password");
    Sc.EnableSsl = true;
    Sc.Send(msg);
    Response.Write("Sent!!! ... ");
    Response.Redirect("Login.aspx");
}
catch (Exception ex)
{
    Response.Write(ex.Message);
}

я хочудобавить VIN (Id #) в мой оператор msg.Body , как я могу это сделать?как один из участников уже предложил мне использовать столбец UserID таблицы для генерации регистрационных номеров НО ... в настоящее время я не изучаю SQL.я только изучаю c # и asp.net, но часть моего проекта, который я выбрал, имеет дело с базами данных ... Столбец UserId в моей таблице базы данных PrimarKey ... он увеличивается вместе синформация о пользователе в других столбцах всякий раз, когда пользователь регистрируется.Может кто-нибудь, пожалуйста, скажите мне, как я могу использовать этот столбец UserId, чтобы получить его значение и сохранить его в обычной целочисленной переменной ??Пожалуйста помоги.-

1 Ответ

2 голосов
/ 17 марта 2012

Вы можете вернуть вновь вставленный идентификатор пользователя в качестве выходного параметра и объединить свой префикс "MVIN" (плюс нули заполнения) с этим идентификатором.

-- after insert
SET @NewId = scope_identity();

Лично мне не нравится выставлять базуИдентификаторы таким образом.Я бы предпочел использовать криптографически случайное число, чтобы меньше шансов на то, что пользователь сможет экстраполировать другое допустимое число.Например, если мой идентификатор «MVIN-0005», попробуйте «MVIN-0004» и «MVIN-0006» довольно просто.

internal static long CreateId()
{
    RNGCryptoServiceProvider _crypto = new RNGCryptoServiceProvider();
    byte[] bytes = new byte[8];
    _crypto.GetBytes( bytes );
    return BitConverter.ToInt64( bytes, 0 );
}

Полученные идентификаторы будут довольно большими (возможно,слишком много для пользователя, чтобы напечатать?).Вы можете сократить число, обнуляя байты в конце массива (bytes[6] = bytes[7] = 0;)

Поскольку нет гарантии, что два случайных числа, сгенерированные таким образом, не будут сталкиваться, сохраняя их вместе с пользователемзапись также может быть необходимостью (так что вы можете проверить наличие дубликатов).

...