对xml不熟悉,大家看我写的哪有问题,谢谢

zhangzs8896 2006-04-19 02:43:55
我 想将一个xml的字符串,存放在数据库中的一个字段,同时返回XmlReader对象。
其中的GetstrXML()是返回xml字符串的。

//存储XML字符串,并返回XmlReader对象.
private XmlReader SaveStrXml()
{
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationSettings.AppSettings
["ConnectionString"].ToString();
con.Open();
string strSQL = "insert RLL(strXML) select '" +GetstrXML()+"'";
SqlCommand cmd = new SqlCommand(strSQL,con);
XmlReader xr ;
xr = cmd.ExecuteXmlReader();
return xr;
}
catch(Exception err)
{
throw new Exception("生成XmlReader对象异常: "+err.Message);
}
}

现在是,xr = cmd.ExecuteXmlReader();这一句执行的时候提示错误:未将对象引用设置到对象的实例
我的问题出在哪里呢,希望知道的朋友告诉我一下,谢谢
...全文
204 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingbingcha 2006-04-20
  • 打赏
  • 举报
回复
如果你要保持XML文件的父子关系,就需要自己单独写DataSet的主副键映射..设置一个主键,然后关联到另外表的副键..

另外,我这里根据你提供的XML字符串内容,用DS绑定到Datagrid之后,得到的就是张三和李四的结果.不知道你说的意思是不是要把"第一车间"也显示出来??这样的话,你输出表名就好了.

zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
又试了一下,好象只能得到最后一个节点的数据。
我希望得到XML中的多个节点的数据,怎么弄?
比如:
我希望得到

第一车间(假定是个Label)
张三
李四
这个可以显示在DataGrid中。


zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
换句话说,我希望保持原由XML的父子关系。
不知道是否可以?
zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
thanks
已经得到:
张三
李四

但是为什么我改了
ds.Tables["EmpName"];
==》 ds.Tables["DeptName"];
却得不到 “第一车间”了呢,ft
bingbingcha 2006-04-19
  • 打赏
  • 举报
回复
读取的方法按照下面的代码:

string text = GetstrXML();//这里的GetstrXML()就是你读取后的XML结构..我用的是你贴出来的那些..
XmlTextReader reader = new XmlTextReader(new StringReader(text));
reader.WhitespaceHandling = WhitespaceHandling.None;
int i=0;
while ( !reader.EOF ) {
Response.Write( i + ":" + reader.Name + ":" + reader.Value + "<br>" );
reader.MoveToContent();
reader.Read();
i++;
}


====================================

至于要绑定到DataGrid();则不能使用XmlReader ,需要把XmlReader 添加到DataSet中..然后把DataGrid中的数据源指向DataSet的表中..

具体代码如下:
string text = GetstrXML();
XmlTextReader reader = new XmlTextReader(new StringReader(text));
reader.WhitespaceHandling = WhitespaceHandling.None;//保持空格
DataSet ds = new DataSet("myDataSet");
ds.ReadXml( reader );//加载XML到DS中
PrintValues( ds,"myDataSet" );//打印DS的结构和数据
dg.DataSource = ds.Tables["EmpName"];//绑定DataGrid数据源
dg.DataBind();
reader.Close();
ds.Dispose();

//这里是输出DataSet中的记录..可以从这里分析一下XML在DataSet中的结构..
private void PrintValues(DataSet ds, string label)
{
Response.Write("<br>" + label);
foreach(DataTable t in ds.Tables)//输出所有表
{
Response.Write("表名字TableName: " + t.TableName);
foreach(DataRow r in t.Rows)//输出表中的行
{
foreach(DataColumn c in t.Columns)//输出表中的列
{
Response.Write("数据: " + r[c] );
}
Response.Write("<br>");
}
}
}



zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
private string GetstrXML()
{
string strXML = "";
strXML += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
strXML += "<DeptName>";
strXML +="第一车间";
strXML += "<EmpName>";
strXML +="张三";
strXML +="</EmpName>";
strXML += "<EmpName>";
strXML +="李四";
strXML +="</EmpName>";
strXML +="</DeptName>";
return strXML;
}

如果这样的话,我应该如何将人名取出?
上的方法可以取到:第一车间张三李四
我想将这几个值分别放到DataGrid的不同列中。
其中的EmpName不固定数目。
zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
多谢bingbingcha(不思不归,不孟不E,原来是头大灰狼)
已经搞定了,原来是SQL语句有问题。
按您的提示更改完后,可以的。
zhangzs8896 2006-04-19
  • 打赏
  • 举报
回复
回楼上
private string GetstrXML()
{
string strXML = "";
strXML += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
strXML += "<DeptName>";
strXML +="第一车间";
strXML +="</DeptName>";
return strXML;
}
我试试 ,后面加FOR XML ?
bingbingcha 2006-04-19
  • 打赏
  • 举报
回复
看不到你的string strSQL = "insert RLL(strXML) select '" +GetstrXML()+"'";这个string的原型..你看看下面的这个MSDN的方法吧.


SqlCommand custCMD = new SqlCommand("SELECT * FROM Customers FOR XML AUTO, ELEMENTS", nwindConn);

System.Xml.XmlReader myXR = custCMD.ExecuteXmlReader();

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧