我的Web应用程序的一部分注册用户,并在将数据存储到数据库后向他们发送确认邮件。如何为每个用户分配每个用户唯一的注册ID ,如此模式“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);
}
我想在我的 msg.Body 语句中添加VIN(Id#),我该怎么做? 作为成员之一hav已经建议我使用表的UserID列来生成注册号但 ...我目前不学习SQL。我只是学习c#和asp.net,但是我项目的一部分我选择了与数据库的交易...我的数据库表中的UserId列是 PrimarKey ...它会随之增加用户注册时,其他列中的用户信息。可以请一些Pleaseeeee告诉我如何使用此UserId列获取其值并将其存储在正常的整数变量中?请帮忙。 -
答案 0 :(得分:2)
您可以将新插入的用户ID作为输出参数返回,并将“MVIN”前缀(加上填充零)与该ID连接。
-- after insert
SET @NewId = scope_identity();
我个人不喜欢以这种方式公开数据库ID。我宁愿使用密码学随机数,以便用户可以推断出另一个合法数字的可能性更小。例如,如果我的ID是“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 );
}
结果ID会非常大(对于用户来说可能太多了?)。您可以通过将数组末尾的字节清零来缩短数字(bytes[6] = bytes[7] = 0;
)
由于无法保证以这种方式生成的两个随机数不会发生冲突,因此将它们与用户记录一起存储也是必要的(这样您就可以检查欺骗行为)。