/ Published in: C#
I removed several properties from my custom Profile class, and wanted to clean out the data from the aspnet\_Profile table. This code will remove all unwanted data from the PropertyNames and PropertyValuesString columns of aspnet\_Profile. Note this assumes PropertyValuesBinary is not used, though it wouldn't be hard to support that too.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
protected void fixProfile(aspnet_Profile p) { string[] okfields = { "names", "of", "profile", "properties", "you", "want", "to", "keep"}; // search for: fieldname:S:startpos:length string regex = @"([a-zA-Z0-9]+):S:([0-9]+):([0-9]+):"; string newNames = string.Empty; string newValues = string.Empty; int pos = 0; System.Text.RegularExpressions.Regex rgx System.Text.RegularExpressions.Match match = rgx.Match(p.PropertyNames, pos); while ( match != null && match.Success ) { string propertyName = match.Groups[1].Value; if (okfields.Contains(propertyName)) { // We want to keep this profile property. Extract the // value and then append to newNames/newValues int startPos = Convert.ToInt32(match.Groups[2].Value); int len = Convert.ToInt32(match.Groups[3].Value); string value = p.PropertyValuesString.Substring(startPos, len); newNames += string.Format( "{0}:S:{1}:{2}:", propertyName, newValues.Length, len); newValues += value; } pos = match.Index + match.Length; match = rgx.Match(p.PropertyNames, pos); } p.PropertyNames = newNames; p.PropertyValuesString = newValues; } protected void cleanMyData() { // db is your DataContext foreach (var user in db.aspnet_Users) { aspnet_Profile p = user.aspnet_Profile; if (p == null) continue; fixProfile(p); db.SubmitChanges(); } }