我创建了一个存储过程,该存储过程返回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/

10-11 03:11