我需要将所有的数据表导出到单独的XML文件中,如果有一个很大的表,我不能一次导出所有的行,因为System.OutOfMemoryException。所以我尝试导出N行。但是,如果我在查询中使用分页语法,WriteXml会抛出异常。
我已经在LINQPad中测试了这两个查询,它们都很好。
System.InvalidOperationException:无法序列化DataTable。未设置DataTable名称。
// The first query causes exception
string oraQueryGetTableData = "SELECT * FROM (SELECT t0.* FROM MY_TABLE t0) WHERE ROWNUM <= 100";
// The second query runs without any error
//oraQueryGetTableData = "SELECT * FROM MY_TABLE";
OracleCommand oraCommandGetTableData = new OracleCommand(oraQueryGetTableData, oraConnection);
OracleDataReader oraReaderTableData = oraCommandGetTableData.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(oraReaderTableData);
// Exception might occur here
dataTable.WriteXml(writer, true);
这里有什么问题,或者我如何解决这个问题?
2条答案
按热度按时间mzaanser1#
正如异常所说的-表没有设置
TableName
属性。你只需要设置它。8cdiaqws2#
如果使用
Newtonsoft
将JSON字符串数据反序列化为DataTable
,则TableName
属性将NOT设置。我编写了示例代码,并将断点放在dt
赋值之后,以便让您了解什么是dt.TableName
。调试结果如下所示:因此,如果您希望将
DataTable
作为Web服务方法的结果返回,则需要在DeserializeObject
之后分配TableName
属性。我将代码改为:我又调试了一遍。这是Web方法可以返回的首选
DataTable
。