Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从oracle使用c#中的xmldataReader执行xml查询_C#_Oracle - Fatal编程技术网

如何从oracle使用c#中的xmldataReader执行xml查询

如何从oracle使用c#中的xmldataReader执行xml查询,c#,oracle,C#,Oracle,我有如下xml查询 cmd1 = new OracleCommand (@" select XMLElement( ""Person"",XMLAttributes( 'test' as ""TEST"" ), XMLElement(""Bo

我有如下xml查询

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文档返回,因此一定程度的包装是不可避免的。