我创建了一个存储过程,该存储过程返回XML,并且我也想以我创建的方法返回该XML。
我有两个问题。首先,在进行一些搜索后,不建议使用.ExecuteScalar();
,因为它会截断超过2033个字符的字符串。
因此,我找到了一个名为ExecuteXMlReader()
的函数,但是在运行于.NET 4.0(C#)的Visual Web Developer 2010 Express中,它抛出了"System.Data.SqlClient.SqlCommand' does not contain a definition for 'ExecuteXMlReader' and no extension method 'ExecuteXMlReader' accepting a first argument of type 'System.Data.SqlClient.SqlCommand' could be found"
错误
这是我的存储过程:
CREATE PROCEDURE dbo.GETReport
(@ReportDate date)
AS
SELECT * FROM ReportTbl
WHERE ReportDate = @ReportDate
for xml auto, elements
set nocount on;
RETURN
这是我的方法:
using System.Data;
using System.Data.SqlClient;
...
//connect
SqlConnection conn = new SqlConnection("Data Source=localhost; User Id=foo; Password=foo; Initial Catalog=Database1");
conn.Open();
//create command
SqlCommand cmd = new SqlCommand("dbo.GETReport", conn);
cmd.Parameters.AddWithValue("@ReportDate", "3/24/2011");
cmd.CommandType = CommandType.StoredProcedure;
DataReader rd = cmd.ExecuteXMlReader(); //this is where error is occuring
//also, it is throwing an error for DataReader as well saying there is no
//type of namespace with that name
rd.Read();
string s = rd.ReadOuterXml(); //also dont know if this is how i should return the XML
其次,除了
ExecuteXMLReader()
问题外,我不知道返回字符串是否首先是返回XML的正确方法。是否应该将其他对象类型转换为?还是我应该使用的另一个功能?先感谢您!!
最佳答案
首先,SqlCommand
具有ExecuteXmlReader
方法,而不是您编写时的ExecuteXMlReader
(这是拼写错误)。其次, SqlCommand.ExecuteXmlReader
方法返回的类型为XmlReader
的值,而不是示例中的DataReader
。因此,将代码更改为:
using (XmlReader reader = cmd.ExecuteXmlReader())
{
while(reader.Read())
{
string s = reader.ReadOuterXml();
// do something with s
}
}
应该解决问题。
关于c# - 如何从存储过程返回XML?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5423980/