你的位置:首页 > ASP.net教程

[ASP.net教程]以对象的方式来访问xml数据表(二)


  为什么要以对象的方式来访问

  还记得,自己是在一次完成师兄布置的任务时接触到了

  自己做的第一个WPF桌面应用程序——备忘录,就是用

  这是我第一个版本的访问

using System;using System.Collections.Generic;using System.Linq;using System.using System.IO;using System.Text.RegularExpressions;namespace public class #region 私有字段    private string private string[] private string noteName;    #endregion    #region 公有字段    public XElement Notes;    #endregion    #region 公有方法    //连接数据文件    public bool Connect(string path_, string noteName_, params string[] properties)    {      try      {        //匹配        if (!Regex.IsMatch(path_, @"^(?<fpath>([a-zA-Z]:\\)([\s\.\-\w]+\\)*)(?<fname>[\w]+.[\w]+)") || noteName_ == "" || path_.Length < 5 || path_.Substring(path_.Length - 3).ToLower() != "")        {          return false;        }        noteName = noteName_;//记录每条记录的名称        //记录文件路径        if (path_.LastIndexOf("\\") > 0)        {          path_ = path_.Substring(0, path_.LastIndexOf("\\"));        }        else        {          path_ = "";        }        if (path_ != "" && !Directory.Exists(path_))        {          Directory.CreateDirectory(path_);          var new StreamWriter("<?");          "<" + noteName + "s>");          "</" + noteName + "s>");          else        {          if (!File.Exists(var new StreamWriter("<?");            "<" + noteName + "s>");            "</" + noteName + "s>");            = XElement.Load(= new string[properties.Length];        = properties;//记录每条记录的属性        return true;      }      catch (Exception e)      {        throw e;        //return false;      }    }    //保存数据文件    public bool SaveChanged()    {      try      {        Notes.Save(return true;      }      catch (Exception e)      {        throw e;        //return false;      }    }    //添加纪录:添加到末尾(方法一)    public bool AddNote(params string[] propertyValues)    {      try      {        if (propertyValues.Length == if (Notes.Elements(noteName).Count() > 0)          {            int newNo;            var lastNote = from Note in Notes.Elements() select Convert.ToInt32(Note.Attribute("No").Value);            newNo = lastNote.Max() + 1;            Notes.LastNode.AddAfterSelf(noteName, new XAttribute("No", newNo));            for (int i = 0; i < )            {              if (i == 0)              {                Notes.Elements().Last().AddFirst(new XElement(else              {                Notes.Elements().Last().LastNode.AddAfterSelf(new XElement(else          {            Notes.AddFirst(new XElement(noteName, new XAttribute("No", 1)));            for (int i = 0; i < )            {              if (i == 0)              {                Notes.Element(noteName).AddFirst(new XElement(else              {                Notes.Element(noteName).LastNode.AddAfterSelf(new XElement(return true;        }        else        {          return false;        }      }      catch (Exception e)      {        throw e;        //return false;      }    }    //添加记录:添加到末尾(方法二)    public bool AddNote(XElement newNote)    {      try      {        if (newNote.Elements().Count() == if (Notes.Elements(noteName).Count() > 0)          {            int newNo;            var lastNote = from Note in Notes.Elements() select Convert.ToInt32(Note.Attribute("No").Value);            newNo = lastNote.Max() + 1;            if(newNote.Attribute("No") == null)            {              newNote.Add(new XAttribute("No", newNo));            }            else            {              newNote.Attribute("No").Value = newNo.ToString();            }            Notes.Elements().Last().AddAfterSelf(newNote);          }          else          {            if (newNote.Attribute("No") == null)            {              newNote.Add(new XAttribute("No", 1));            }            else            {              newNote.Attribute("No").Value = "1";            }            Notes.AddFirst(newNote);          }          return true;        }        else        {          return false;        }      }      catch (Exception e)      {        throw e;        //return false;      }    }    //添加记录:添加到开头    public bool AddFistNote(XElement newNote)    {      try      {        if (newNote.Elements().Count() == if (Notes.Elements(noteName).Count() > 0)          {            int newNo;            var lastNote = from Note in Notes.Elements() select Convert.ToInt32(Note.Attribute("No").Value);            newNo = lastNote.Max() + 1;            if (newNote.Attribute("No") == null)            {              newNote.Add(new XAttribute("No", newNo));            }            else            {              newNote.Attribute("No").Value = newNo.ToString();            }            Notes.AddFirst(newNote);          }          else          {            if (newNote.Attribute("No") == null)            {              newNote.Add(new XAttribute("No", 1));            }            else            {              newNote.Attribute("No").Value = "1";            }            Notes.AddFirst(newNote);          }          return true;        }        else        {          return false;        }      }      catch (Exception e)      {        throw e;        //return false;      }    }    //删除记录(单一索引)    public bool DeletNote(string no = "", params string[] propertyValues)    {      try      {        bool okFlag = false;        if (propertyValues.Length > return false;        }        else        {          if (no == "") //按属性值相等删除          {            for (int i = 0; i < propertyValues.Length; i++)            {              if (propertyValues[i] == "") continue;              if (Notes.Elements(noteName).Count() == 0) return false;//数据文件内容为空              var proNotes = Notes.Elements(noteName).Elements( propertyValues[i]);              foreach (var item in proNotes)              {                item.Parent.Remove();                okFlag = true;              }            }          }          else //按编号相等删除          {            if (Notes.Elements(noteName).Count() == 0) return false;//数据文件内容为空            var proNote = Notes.Elements(noteName).SingleOrDefault(m => m.Attribute("No").Value == no);            if (proNote != null)            {              proNote.Remove();              okFlag = true;            }          }          return okFlag;        }      }      catch (Exception e)      {        throw e;        //return false;      }    }    //修改记录(编号索引:方法一)    public bool ModifyNote(string no, params string[] propertyValues)    {      try      {        if (no == "" || propertyValues.Length != return false;        }        bool okFlag = false;        if (Notes.Elements(noteName).Count() == 0) return false;//数据文件内容为空        var proNote = Notes.Elements(noteName).Attributes("No").SingleOrDefault(m => m.Value == no);        if (proNote != null)        {          var proSubNotes = proNote.Parent.Elements();          int i = 0;          foreach (var item in proSubNotes)          {            item.Value = propertyValues[i++];          }          okFlag = true;        }        return okFlag;      }      catch (Exception e)      {        throw e;        //return false;      }    }    //修改记录(编号索引:方法二用一个新的节点(No值不变)替代)    public bool ModifyNote(string no, XElement noteModified)    {      try      {        if (no == "" || noteModified.Elements().Count() != return false;        }        bool okFlag = false;        if (Notes.Elements(noteName).Count() == 0) return false;//数据文件内容为空        var proNote = Notes.Elements(noteName).Attributes("No").SingleOrDefault(m => m.Value == no);        if (proNote != null)        {          proNote.Parent.ReplaceWith(noteModified);        }        return okFlag;      }      catch (Exception e)      {        throw e;        //return false;      }    }    //查询记录(单一索引)    public IEnumerable<XElement> QueryNote(string no = "", params string[] propertyValues)    {      IEnumerable<XElement> result = null;      try      {        if (no == "" && propertyValues.Length == 0)//返回所有数据        {          return Notes.Elements(noteName);        }        if (no == "" && propertyValues.Length != 0)        {          for (int i = 0; i < propertyValues.Length; i++)          {            if (propertyValues[i] == "") continue;            if (Notes.Elements(noteName).Count() == 0) return result;//数据文件内容为空            var proNotes = Notes.Elements(noteName).Elements( propertyValues[i]);            return proNotes;          }        }        else        {          if (Notes.Elements(noteName).Count() == 0) return result;//数据文件内容为空          var proNote = Notes.Elements(noteName).Attributes("No").SingleOrDefault(m => m.Value == no);          if (proNote != null)          {            result = new XElement[] { proNote.Parent };          }        }        return result;      }      catch (Exception e)      {        throw e;        //return false;      }    }    //获取记录的条数    public int Count()    {      try      {        return Notes.Elements(noteName).Count();      }      catch (Exception e)      {        throw e;        //return false;      }    }    //获取所有记录    public IEnumerable<XElement> AllNotes()    {      try      {        return Notes.Elements(noteName);      }      catch (Exception e)      {        throw e;        //return false;      }    }    //获取最后一条记录的No    public int GetLastNoteNo()    {      try      {        if (Notes.Elements(noteName).Count() > 0)          return (from Note in Notes.Elements(noteName) select Convert.ToInt32(Note.Attribute("No").Value)).Max();        else          return 0;      }      catch (Exception e)      {        throw e;        //return false;      }    }    #endregion  }}

View Code

  后面自己又用

  Model里面的User类:

using System;using System.Collections.Generic;using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Web;namespace Test.Models{  public class User  {    [Required]    public Int32 Id { get; set; }    [Required]    [DisplayName("名字")]    public String Name { get; set; }    [Required]    [DisplayName("用户名")]    public String Account { get; set; }    [Required]    [DisplayName("密码")]    public String Password { get; set; }    //创建时间    [Required]    public DateTime CreateTime { get; set; }    //标识是否为管理员    [Required]    public Boolean IsAdmin { get; set; }  }}

View Code

  继承了DbContext接口的类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data.Entity;namespace Test.Models{  public class WS_WebAppContext : DbContext  {    public virtual DbSet<User> Users { get; set; }    public WS_WebAppContext() : base("name=WS_WebAppContext")    {          }  }}

View Code

  Control里面轻松访问,只是给出了登录验证部分:

using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;using System.Web.Security;using Test.Models;namespace Test.Controllers{  public class HomeController : Controller  {        WS_WebAppContext entity = new WS_WebAppContext();         //登录页面    public ActionResult Login()    {      return View();    }        //检查登录信息    [HttpPost]    public ActionResult Login(User u)    {      var logined = entity.Users.SingleOrDefault(m => m.Account == u.Account);      if (!string.IsNullOrWhiteSpace(u.Password) && logined != null && logined.Password == u.Password)      {        String role = "User";        if (logined.IsAdmin)        {          role = "Admin";        }        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(          1,          logined.Id.ToString(),          DateTime.Now,          DateTime.Now.AddMinutes(120),          false,          role          );        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);        Response.Cookies.Add(authCookie);        if (logined.IsAdmin)        {          return RedirectToAction("Index", "Admin");//跳转到管理员的主页        }        else        {          return RedirectToAction("Index", "User");//跳转到用户的主页        }      }      else      {        return Content("<script>alert('用户名或密码错误!');local.href='http://www.cnblogs.com//Home/Index'</script>");      }    }  }}

View Code

  HomeController里面的entity对象就是专门用来访问数据库的,通过它可以简单方便的对数据库里面的数据表(entity.Users就对应着数据库中的用户表)进行增删查改。

当我看到它的简洁方便之处时,灵感来了,我就在想,为什么我不用这种以对象的方式来实现那个专门用于访问

  对于为什么要以对象的方式来访问

  让我们在(三)中接着详谈怎样以对象的方式来访问