新建xml文件–AccountDB.xml
使用xml文件存储页面数据,用与用户登录和用户账号列表的展示
<Root>
<LoginAccount>
<Column Name="test" UserGuid="db7e1daa02d17325">
<UserGuid>db7e1daa02d17325UserGuid>
<UserName>testUserName>
<NickName>张三NickName>
<PassWord>c4ca4238a0b923820dcc509a6f75849bPassWord>
Column>
<Column Name="admin" UserGuid="dd2d47215257c963">
<UserGuid>dd2d47215257c963UserGuid>
<UserName>adminUserName>
<NickName>1NickName>
<PassWord>c4ca4238a0b923820dcc509a6f75849bPassWord>
Column>
LoginAccount>
<AccountList>
<Column UserGuid="db7e1daa02d17325" AccountID="11">
<AccountGuid>11AccountGuid>
<ProductName>360ProductName>
<AccountNumber>asasasaAccountNumber>
<PassWord>1111PassWord>
Column>
<Column UserGuid="db7e1daa02d17325" AccountID="22">
<AccountGuid>22AccountGuid>
<ProductName>sinaProductName>
<AccountNumber>saewewewAccountNumber>
<PassWord>1111PassWord>
Column>
<Column UserGuid="db7e1daa02d17325" AccountID="333">
<AccountGuid>333AccountGuid>
<ProductName>csdnProductName>
<AccountNumber>fdfdfdfdAccountNumber>
<PassWord>2222PassWord>
Column>
<Column UserGuid="db7e1daa02d17325" AccountID="4444">
<AccountGuid>4444AccountGuid>
<ProductName>baiduProductName>
<AccountNumber>1111AccountNumber>
<PassWord>1111PassWord>
Column>
AccountList>
Root>
新建完成xml文件以后,设置好自定义的格式,xml文件的节点名字可以自定义设置,这是xml文件的优点
在用户登录页面需要查询xml 文件内部用户的值
在获取xml文件之前先获取xml文件的路径,方便读取文件
在web页面读取xml文件路径方法
private static string FilePath = HttpRuntime.AppDomainAppPath + @"AccountDB.xml";
在win窗体程序读取xml文件路径方法
public static string GetFilePath()
{
DirectoryInfo dir = new DirectoryInfo(Application.StartupPath).Parent.Parent;
string filePath = dir.FullName + "/AccountDB.xml";
return filePath;
}
dir.FullName获取的是当前站点的路径
需要添加using System.IO;引用
在操作xml文件内部的数据时,往往直接在xml内部读取数据比较麻烦,现在我们可以将xml文件内部的数据直接转存在自定义的DataTable内,在C#中,操作DataTable往往比xml快的多(个人观点)
在读取上面的AccountDB.xml文件,可以将读取出两张表,我这边只读出用户登录表
在将xml文件数据转换成DataTable之前,我们需要将xml文件中要转换的部分读取出来(不废话,直接贴代码)
//获取当前需要转换的XML
Public string GetXmlStr()
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(GetFilePath());//这里的GetFilePath()是获取当前xml文件的路径我这里是在win窗体程序内应用 web端可以直接调用FilePath
string xmlstr = xmldoc.InnerXml;
int startnum = xmlstr.IndexOf(@"" );
int endnum = xmlstr.IndexOf(@"");
xmlstr = xmlstr.Substring(startnum, endnum - startnum + 15);//数字15代表的长度
return xmlstr ;
}
获取到需要转换的xml文件以后,直接将xml文件数据转换成DataTable(这里可以返回DataSet,根据自己的需要)
public static DataTable GetLoginList()
{
DataSet xmlDS = new DataSet();
StringReader stream = null;
XmlTextReader reader = null;
try
{
string xmlstr = GetXmlStr();
stream = new StringReader(xmlstr);
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
}
catch (Exception ex)
{
string strTest = ex.Message;
return null;
}
finally
{
if (reader != null)
reader.Close();
}
return xmlDS.Tables[0];
}
在将数据转换成表以后,在登录中只需要在转换出的表中查找就可以了
Public bool Login(string username,string pwd)
{
bool bl=false;
DataTable dt=GetLoginList();
DataRow[] daArr=dt.Select("UserName='"+username+"' AND PassWord='"+pwd.MD5EnCode();+"' ");
DataTable account=new DataTable();
account=dt.Copy();
account.Row.Clear();
if(daArr.Length>0)
{
for (int i = 0; i < daArr.Length; i++)
{
account.ImportRow(daArr[i]);
}
}
bl=account.Rows.Count>0;
return bl;
}
上面说到对xml文件的读取,用户登录完成以后一般新用户也是需要注册滴,在注册新用户时需要在xml写入新的数据,按照xml文件格式插入相应的数据节点
在写入时一样需要读取到当前xml文件并且找到节点,并且在该节点下插入数据节点,直接奉上代码以供参考(不喜勿喷)
public void RegisterAccount(string username,string nickname,string pwd)
{
string xmlurl=GetFilePath();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlurl);
XmlNode root = xmldoc.SelectSingleNode("Root");//查找节点
XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找节点
XmlElement col = xmldoc.CreateElement("Column");//创建一个节点
col.SetAttribute("Name", username);
string guid="";//主键Guid自动生成,这里可根据用户需要设置(获取Guid方法可以私信我)
XmlElement userguid = xmldoc.CreateElement("UserGuid"); //创建子节点
userguid.InnerText = guid; //设置节点值
col.AppendChild(userguid);//添加到节点
XmlElement name = xmldoc.CreateElement("UserName"); //创建子节点
name.InnerText = username; //设置节点值
col.AppendChild(name);//添加到节点
XmlElement nick = xmldoc.CreateElement("NickName"); //创建子节点
nick.InnerText = nickname; //设置节点值
col.AppendChild(nick);//添加到节点
XmlElement password = xmldoc.CreateElement("PassWord"); //创建子节点
password.InnerText = pwd.MD5EnCode(); //设置节点值
col.AppendChild(password);//添加到节点
loginaccount.AppendChild(col); //将节点添加到节点
xmldoc.Save(xmlurl);//保存当前xml文件
}
在插入数据之前可以添加一个小方法,验证当前添加的数据是否存在
public bool CheckUser(string username)
{
bool bl = true;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(WinHelp.GetFilePath());
XmlNode root = xmldoc.SelectSingleNode("Root");//查找节点
XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找节点
XmlNodeList columnlist = loginaccount.SelectNodes("Column");
foreach (XmlNode colunm in columnlist)
{
XmlElement xm = (XmlElement)colunm;
if (xm.GetAttribute("Name") == username)
{
bl = false;
}
}
return bl;
}
在用户修改密码时需要对当前用户数据在xml里面进行修改,就需要对Xml文件进行操作
这里演示用户修改密码
public void UpdateAccount(string oldpwd,string newpwd,string accountguid)
{
string xmlurl=GetFilePath();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlurl);
XmlNode root = xmldoc.SelectSingleNode("Root");//查找节点
XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找节点
XmlNodeList columnlist = loginaccount.SelectNodes("Column");
foreach (XmlNode colunm in columnlist)
{
XmlElement xm = (XmlElement)colunm;
if (xm.GetAttribute("UserGuid") == accountguid)
{
XmlNodeList conxm = xm.ChildNodes;
foreach (XmlNode item in conxm)
{
XmlElement itxe = (XmlElement)item;
string name = itxe.Name;
if(name=="PassWord")
{
if(itxe.InnerText==old.MD5EnCode())
{
itxe.InnerText = newpwd.MD5EnCode();
}
}
}
}
}
xmldoc.Save(xmlurl);
}
在用户管理时,系统管理员可以将指定的用户删除,这就需要对xml节点进行删除,删除xml节点并保存
private void DelAccount(string accountguid)
{
string xmlurl = GetFilePath();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlurl);
XmlNode root = xmldoc.SelectSingleNode("Root");//查找节点
XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找节点
XmlNodeList columnlist = loginaccount.SelectNodes("Column");
foreach (XmlNode colunm in columnlist)
{
XmlElement xm = (XmlElement)colunm;
if (xm.GetAttribute("UserGuid") == accountguid)
{
XmlElement colxml = (XmlElement)loginaccount;
colxml.RemoveChild(colunm);//移除掉节点下指定的子节点
}
}
xmldoc.Save(xmlurl);
}
上面在用户登录,用户注册 ,密码修改,用户管理等各使用到的是对xml文件的查询,新增 ,修改,删除,等基本操作,以上代码个人亲测通过,基本上是copy以后可以直接使用,如有疑问可以私信我,不喜勿喷,
源代码已上传,有需要可以下载http://download.csdn.net/detail/shechaojin/9502916