我将一个表用DataTable.WriteXml()方法写入指定的xml文件之后,再用DataTable.ReadXml()方法读取数据时发生"DataTable 不支持来自 XML 的架构推断。"这个错误,请前辈们帮忙解决!
解决方案 »
- Microsoft Visual Studio 10.0中用C#(控制台)怎么打开Object Browser窗口
- 在子线程上hide窗体,有什么不对
- 类似农场采摘时光标变小手的图片
- C# Graphics 有关 transform 的问题
- 程序发布后,无法在客户端安装
- 泛型的高难度问题
- Entity Framework中如何根据已有的DbConnection创建EntityConnection?
- web中编辑datagrid,怎么获得两个主键值(表中有两个主键)来确定要删除的行
- 常规下两个工程互相引用是不能的,但是我拿到一套程序,却可以互相引用
- 在c# listview 中的第一列的数据可以用鼠标选中,其他列就不会,怎样去掉第一列可以选中的问题
- C#的OutofMemory异常
- 如何用C#矩阵计算对角线之和
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
System.Data.DataTable dt = new System.Data.DataTable("datatable");
dt.Columns.Add("aa",typeof(string));
System.Data.DataRow dRow = dt.NewRow();
dRow["aa"] = "test";
dt.Rows.Add(dRow);
dt.WriteXml(@"c:\dt.xml", System.Data.XmlWriteMode.WriteSchema); System.Data.DataTable dt2 = new System.Data.DataTable("datatable");
dt2.ReadXml(@"c:\dt.xml"); } }
}
完善出错代码
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlname);
XmlNode root = xmlDoc.SelectSingleNode("DocumentElement");//查找<DocumentElement>
XmlNodeList nodeList = xmlDoc.SelectSingleNode("DocumentElement").ChildNodes;//获取bookstore节点的所有子节点
Boolean isuplog = false;
#region 更新
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if (xe.GetAttribute("user") == struser)//
{
XmlNodeList nls = xe.ChildNodes;//
foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.Name == "objjc")//如果找到
{
xe2.InnerText = txtpckey.Text ;//则修改
break;//找到退出来就可以了
}
}
isuplog = true;
break;
}
}
#endregion
#region 添加
if (isuplog == false)
{
XmlElement xe1 = xmlDoc.CreateElement("loginuser");//创建一个<loginuser>节点
xe1.SetAttribute("user", struser);//设置该节点genre属性
XmlElement xesub0 = xmlDoc.CreateElement("user");
xesub0.InnerText = struser;//设置文本节点
xe1.AppendChild(xesub0);//添加到<book>节点中
XmlElement xesub1 = xmlDoc.CreateElement("memo");
xesub1.InnerText = "";//设置文本节点
xe1.AppendChild(xesub1);//添加到<book>节点中
XmlElement xesub2 = xmlDoc.CreateElement("objjc");
xesub2.InnerText = txtpckey.Text;//设置文本节点
xe1.AppendChild(xesub2);//添加到<book>节点中
XmlElement xesub3 = xmlDoc.CreateElement("objtime");
xesub3.InnerText = DateTime.Now.ToString();//设置文本节点
xe1.AppendChild(xesub3);//添加到<book>节点中 root.AppendChild(xe1);//添加到<bookstore>节点中 }
#endregion
xmlDoc.Save(xmlname);
mydtxml = new DataTable();
mydtxml.ReadXml(xmlname);
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<loginuser user="admin">
<user>admin</user>
<memo>
</memo>
<objjc>KQ6KPNCQAAVCDHM445F87DY0C42WWLBK2UVP</objjc>
<objtime>2008-5-23 14:48:52</objtime>
</loginuser>
<loginuser user="xlh001">
<user>xlh001</user>
<memo>
</memo>
<objjc>FT4FVAUWWPWP8N7CBEDKE94U3UU7YBYKC0LA</objjc>
<objtime>2008-5-23 16:36:45</objtime>
</loginuser>
</DocumentElement>
<user>admin </user>
你定义两个user,叫别个怎么去识别?
/// 将一个DataTable以xml方式存入指定的文件中
/// </summary>
/// <param name="dt"></param>
/// <param name="filePath"></param>
public static void SaveDataTableToXml(DataTable dt, string filePath)
{
//创建文件夹
if (!Directory.Exists(Path.GetDirectoryName(filePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
} DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml(filePath);
} /// <summary>
/// 从一个指定的文件中读取DataTable
/// </summary>
/// <param name="filePath"></param>
public static DataTable ReadDataTableFromXml(string filePath)
{
DataSet ds = new DataSet();
ds.ReadXml(filePath);
if (ds.Tables.Count > 0)
{
return ds.Tables[0];
}
else
{
return null;
}
}