如何从oracle使用c#中的xmldataReader执行xml查询
我有如下xml查询如何从oracle使用c#中的xmldataReader执行xml查询,c#,oracle,C#,Oracle,我有如下xml查询 cmd1 = new OracleCommand (@" select XMLElement( ""Person"",XMLAttributes( 'test' as ""TEST"" ), XMLElement(""Bo
cmd1 = new OracleCommand
(@" select XMLElement(
""Person"",XMLAttributes(
'test' as ""TEST""
),
XMLElement(""Body"" ,
XMLElement(""SenderID"",'xxx')
),
(select XMLAgg(XMLElement(""Person"" ,
XMLElement(""FirstName"",FirstName),
XMLElement(""ContactNumber"",ContactNumber),
XMLElement(""BirthDate"",BirthDate),
XMLElement(""Gender"",Gender),
XMLElement(""Nationality"",Nationality),
XMLElement(""City"",City)
) )
from member
)
)
AS ""RESULT""
From dual ",conn);
XmlReader xml_reader=cmd1.ExecuteXmlReader()
最后一行抛出一个错误:
由于对象的当前状态,操作无效
如果我使用
OracleDataReader rdr1 = cmd1.ExecuteReader();
我得到这个错误:
ORA-00936:缺少表达式
但是查询在toad中运行,没有任何错误
我做错了什么 您上面的代码不是有效的C#。您需要将逐字记录字符串中的所有双引号字符加倍。除此之外,我要做的下一件事是将包含查询的字符串分配给一个变量,并使用
Console.WriteLine、
或日志框架(如果正在使用)写出其内容。这样,您可以查看代码将发送到数据库的查询。它可能不是你想象的那样。@LukeWoodward你说得对。.我需要把所有的双引号都加倍。.当我把它贴在这里的时候,它在代码中,但它没有找到。.编辑了问题。.我调试了pgm,从cmd得到了查询,并成功地在toad上运行它。我无法重现你用OracleDataReader
。如果要使用XmlReader
,则需要添加一行cmd1.XmlCommandType=OracleXmlCommandType.Query
在调用cmd1.ExecuteXmlReader()
@LukeWoodward之前,我尝试了您的解决方案。它现在可以工作了,但它将uwanted标记作为root,您只需处理这些额外的元素。当然,您的查询将只返回一行,但ODP.NET必须处理返回多行的查询。这种查询的结果必须作为单个XML文档返回,因此一定程度的包装是不可避免的。您上面的代码不是有效的C#。您需要将逐字记录字符串中的所有双引号字符加倍。除此之外,我要做的下一件事是将包含查询的字符串分配给一个变量,并使用Console.WriteLine、
或日志框架(如果正在使用)写出其内容。这样,您可以查看代码将发送到数据库的查询。它可能不是你想象的那样。@LukeWoodward你说得对。.我需要把所有的双引号都加倍。.当我把它贴在这里的时候,它在代码中,但它没有找到。.编辑了问题。.我调试了pgm,从cmd得到了查询,并成功地在toad上运行它。我无法重现你用OracleDataReader
。如果要使用XmlReader
,则需要添加一行cmd1.XmlCommandType=OracleXmlCommandType.Query
在调用cmd1.ExecuteXmlReader()
@LukeWoodward之前,我尝试了您的解决方案。它现在可以工作了,但它将uwanted标记作为root,您只需处理这些额外的元素。当然,您的查询将只返回一行,但ODP.NET必须处理返回多行的查询。这种查询的结果必须作为单个XML文档返回,因此一定程度的包装是不可避免的。