2012-03-16 18 views
0

私のWebアプリケーションの一部がユーザーを登録し、そのデータをデータベースに保存した後で確認メールを送信します。どのように私はは、このパターンのように自動的に各ユーザーに一意の登録IDを割り当てることができ、各ユーザーの「MVIN-0000001」など私は私のにVIN(同上#)を追加したいユーザー登録後、登録番号(UserId)を生成してユーザーにメールで送信する方法は?

//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("[email protected]"); 
    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("[email protected]","password"); 
    Sc.EnableSsl = true; 
    Sc.Send(msg); 
    Response.Write("Sent!!! ... "); 
    Response.Redirect("Login.aspx"); 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.Message); 
} 

msg.Bodyステートメント、どうすればいいですか? メンバーの一人として、すでに私はテーブルのUserID列を使用して登録番号を生成するように勧めましたBUT ...私は現在SQLを習得していません。私のデータベーステーブルのUserId列はです。PrimarKey ...それは他のユーザ情報と一緒にインクリメントされますユーザーが登録するたびにいくつかの1つは私の教えてください私はこのUserId列を使用することができますを取得し、通常の整数変数に格納??助けてください。 -

+0

データをデータベースに保存するために使用しているコードを表示できますか? – Robbie

+0

@Robbie:上記のユーザー情報を保存するコードを追加しました。問題のコードをうまく見直してください。 –

答えて

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;

このように生成された2つの乱数が衝突しないという保証はないため、ユーザーレコードと共に格納することもできます必要性(あなたが詐欺を確認できるように)

+0

先生、真実を伝えるために...私は現在SQLを学んでいません。私はちょうどC#とasp.netを学んでいますが、私のプロジェクトの一部はデータベースとの取引を選択しました...私のデータベーステーブルのUserIdカラムはPrimarKeyです...それはいつでも他のカラムのユーザ情報と共にインクリメントされますユーザが登録する。あなたは私のことを教えてくれますか?このUserIdカラムを使って**その値を取得し、それを通常の整数変数に格納するにはどうすればいいですか?助けてください。 - –

関連する問題