C# 如何从SQL Server数据库中以Xml格式获取数据以及从该Xml填充数据集获取数据
我试图以xml格式从SQLServer获取数据,并从该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
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();
}
}