Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
C# 如何从SQL Server数据库中以Xml格式获取数据以及从该Xml填充数据集获取数据_C#_Sql_Sql Server_Xml - Fatal编程技术网

C# 如何从SQL Server数据库中以Xml格式获取数据以及从该Xml填充数据集获取数据

C# 如何从SQL Server数据库中以Xml格式获取数据以及从该Xml填充数据集获取数据,c#,sql,sql-server,xml,C#,Sql,Sql Server,Xml,我试图以xml格式从SQLServer获取数据,并从该xml填充数据集 我的问题是: SELECT * FROM TblAcademicYear FOR XML RAW('AcademicYear'), ELEMENTS; 此查询提供以下输出: <AcademicYear> <AcademicYearId>3</AcademicYearId> <AcademicYearName>دو ‌ہزار ‌پندرہ</Aca

我试图以xml格式从SQLServer获取数据,并从该xml填充数据集

我的问题是:

SELECT * 
FROM TblAcademicYear 
FOR XML RAW('AcademicYear'), ELEMENTS;
此查询提供以下输出:

 <AcademicYear>
    <AcademicYearId>3</AcademicYearId>
    <AcademicYearName>دو ‌ہزار ‌پندرہ</AcademicYearName>
    <StartingYear>2015-01-01</StartingYear>
   <EndingYear>2015-12-31</EndingYear>
   <Comments>دو ‌ہزار ‌پندرہ ‌کا ‌تعلیم ‌سال</Comments>
  <RCO>2014-07-02</RCO>
  <UserID>2</UserID>
</AcademicYear>
上面的代码运行得很好,但没有提供数据


如果您有任何帮助,我们将不胜感激。…

您尚未获得数据,因为您在读取之前已关闭连接

DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("AcademicYearId", typeof(string));
dt.Columns.Add("AcademicYearName", typeof(string));
dt.Columns.Add("StartingYear", typeof(string));
dt.Columns.Add("EndingYear", typeof(string));
dt.Columns.Add("Comments", typeof(string));
dt.Columns.Add("RCO", typeof(string));
dt.Columns.Add("UserID", typeof(string));
ds.Tables.Add(dt);

cmd.Connection = conn;
conn.Open();
cmd.CommandText = _Query;
xmlreader.Read();    -- // Add this line
xmlreader = cmd.ExecuteXmlReader();
// conn.Close();  -- Remove this line and add it at the end   
ds.ReadXml(xmlreader);
conn.Close();

您必须调用xmlreader的read()方法。

究竟为什么要输出为XML,然后再读回??您可以直接从SQL查询填充数据集,而不必担心XML……完全同意@marc的说法_s@marc_s:事实上,我正在从事Web服务(WCF)的工作。有人告诉我,由于互操作性,在Web服务(WCF)中不要使用DataTable/DataSet,所以这就是为什么我认为XML在WCF中是最好的…对吗?不,不是这样的-WCF可以轻松愉快地将任何普通数据类型转换为XML进行传输-从XML开始实际上是一种障碍而不是好处!但在WCF服务中,我也不会使用.NET重量级类型,比如
DataTable
——使用适当的POCO(普通的旧CLR对象)及其列表/集合——不要使用
DataTable
DataSet
或任何这些……@KhurramAli:必须调用xmlreader的read()方法。我已经更新了我的答案。。。很抱歉,由于忙于其他项目,因此回复延迟…:)
SqlConnection conn = new SqlConnection(ConnectionString);

SqlCommand cmd = new SqlCommand();
System.Xml.XmlReader xmlreader;
XmlDataDocument xmlDataDoc = new XmlDataDocument();
try
{
    cmd.Connection = conn;
    conn.Open();
    cmd.CommandText = _Query;
    xmlreader = cmd.ExecuteXmlReader();
    DataSet ds = new DataSet();
    dt.Columns.Add("AcademicYearId", typeof(string));
    dt.Columns.Add("AcademicYearName", typeof(string));
    dt.Columns.Add("StartingYear", typeof(string));
    dt.Columns.Add("EndingYear", typeof(string));
    dt.Columns.Add("Comments", typeof(string));
    dt.Columns.Add("RCO", typeof(string));
    dt.Columns.Add("UserID", typeof(string));

    ds.Tables.Add(dt);
    while(xmlreader.Read()
    {
      xmlDataDoc.DataSet.ReadXml(xmlreader);
    }
    ds = xmlDataDoc.DataSet;
    xmlreader.Close();
    conn.Close();
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    if (conn.State != ConnectionState.Closed)
    {
       conn.Close();
    }
}
SqlConnection conn = new SqlConnection(ConnectionString);

SqlCommand cmd = new SqlCommand();
System.Xml.XmlReader xmlreader;
XmlDataDocument xmlDataDoc = new XmlDataDocument();
try
{
    cmd.Connection = conn;
    conn.Open();
    cmd.CommandText = _Query;
    xmlreader = cmd.ExecuteXmlReader();
    DataSet ds = new DataSet();
    dt.Columns.Add("AcademicYearId", typeof(string));
    dt.Columns.Add("AcademicYearName", typeof(string));
    dt.Columns.Add("StartingYear", typeof(string));
    dt.Columns.Add("EndingYear", typeof(string));
    dt.Columns.Add("Comments", typeof(string));
    dt.Columns.Add("RCO", typeof(string));
    dt.Columns.Add("UserID", typeof(string));

    ds.Tables.Add(dt);
    while(xmlreader.Read()
    {
      xmlDataDoc.DataSet.ReadXml(xmlreader);
    }
    ds = xmlDataDoc.DataSet;
    xmlreader.Close();
    conn.Close();
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    if (conn.State != ConnectionState.Closed)
    {
       conn.Close();
    }
}