2010-12-29 17 views
2

私はちょっと新しいasp.netですので、何か助けが必要です。ASP.NET:サブミット時にユーザ情報を保存

私はLinqを使用してデータがSQLデータベースに保存されています。

私の質問で、どのように私は、IPアドレスを意味し、送信者に関するすべての情報を持って列を追加することができ、ブラウザ、リファラなど

事がある私は1つのフィールドにそれを保存したいれます。

私は長い間忘れられてきたPHP知識から来ていますが、まだいくつかのシリアル化コマンドがあり、配列で実行してデータベースに保存してから、あなたはdeserializeコマンドを実行するだけで配列に戻ります。

このアクションを実行する最善の方法はあなただと思いますか?

ありがとうございます!

答えて

2

シリアル化された形式でデータをアセンブルし、DB列に保存します。 1つの方法はxml形式を使用することです

var sb = new StringBuilder(); 

sb.Append("<userdata>"); 
sb.Append("<browser>").Append(Request.Browser.Browser).Append("</browser>"); 
sb.Append("<ipaddress>").Append(Request.UserHostAddress).Append("</ipaddress>"); 
sb.Append("<referrer>").Append(Request.UrlReferrer.AbsoluteUri).Append("</referrer>"); 
sb.Append("</userdata>"); 

string SenderData = sb.ToString(); 
// Save the SenderData string to a varchar DB column. 

// The above code only proposes the serialization idea. 
// As commented, it doesn't encode the user values. 
// One of the way to take care of that could be using XmlTextWriter. 

var sb = new StringBuilder(); 

var xtw = new XmlTextWriter(new StringWriter(sb)); 

xtw.WriteStartElement("userdata"); 
xtw.WriteElementString("browser", Request.Browser.Browser); 
xtw.WriteElementString("ipaddress", Request.UserHostAddress); 
xtw.WriteElementString("referrer", Request.UrlReferrer.AbsoluteUri); 
xtw.WriteEndElement(); 

xtw.Close(); 

string SenderData = sb.ToString(); 
// Save the SenderData string to a varchar DB column. 

// Another suggested way 

public class UserData 
{ 
    public string Browser { get; set; } 
    public string IPAddress { get; set; } 
    public string Referrer { get; set; } 

    public UserData() 
    { 
    } 

    public UserData(string browser, string iPAddress, string referrer) 
    { 
     Browser = browser; 
     IPAddress = iPAddress; 
     Referrer = referrer; 
    } 
} 

var userData = new UserData(Request.Browser.Browser, Request.UserHostAddress, Request.UrlReferrer.AbsoluteUri); 

var xmls = new System.Xml.Serialization.XmlSerializer(typeof(UserData)); 
var sb = new StringBuilder(); 
var xtw = new XmlTextWriter(new StringWriter(sb)); 

xmls.Serialize(xtw, userData); 

xtw.Close(); 

string SenderData = sb.ToString(); 
// Save the SenderData string to a varchar DB column. 
+0

はい、コードはXMLを生成する方法の悪い例です(ユーザー提供のデータはXML文字列としてエンコードされません)。 – Jacob

+0

でもXMLとして保存するのは良いことですか?この情報をシリアル化するためのより良い方法ではありませんか? – natiz

+0

@Jacob - 単に「悪い」と表示するのではなく、「良い」例を見ると便利です。 –

関連する問題