programing

DataTable을 직렬화할 수 없습니다.DataTable 이름이 설정되지 않았습니다.

javamemo 2023. 10. 22. 19:21
반응형

DataTable을 직렬화할 수 없습니다.DataTable 이름이 설정되지 않았습니다.

모든 데이터 테이블을 개별 XML 파일로 내보내야 하는데 시스템 때문에 모든 행을 한 번에 내보낼 수 없습니다.OutOf Memory큰 테이블이 있는 경우는 예외입니다.그래서 N개의 행을 수출하려고 했습니다.그러나 WriteXml은 쿼리에서 페이징 구문을 사용할 경우 예외를 발생시킵니다.

저는 LINQPad에서 두 가지 쿼리를 모두 테스트해 보았는데, 괜찮습니다.

System.잘못된 작동예외: 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);  

여기서 무슨 문제가 있거나 어떻게 해결해야 합니까?

예외에서 알 수 있듯이 테이블에는 해당 테이블이 없습니다.TableName재산권 설정설정만 해주시면 됩니다.

DataTable dataTable = new DataTable { TableName = "MyTableName"};
dataTable.Load(oraReaderTableData);
....

사용하는 경우NewtonsoftJSON 문자열 데이터를 역직렬화하는 방법DataTable,그TableName속성이 설정되지 않습니다.샘플 코드를 구성하고 중단점을 다음에 넣었습니다.dt당신에게 무엇이 무엇인지를 알려주는 과제dt.TableName. 디버깅 결과는 다음과 같습니다.

Sample Code

그래서, 만약 당신이 돌려주고 싶다면,DataTable웹 서비스 방법의 결과로서,TableName다음에 속성 할당이 필요합니다.DeserializeObject. 코드를 다음으로 변경합니다.

DataTable dt = JsonConvert.DeserializeObject<DataTable>(
@"[
    { col1: 'value1', col2: 'value2' },
    { col1: 'value3', col2: 'value4' },
    { col1: 'value5', col2: 'value6' },
]");
dt.TableName = "TableName";

그리고 다시 디버그합니다.이것이 더 바람직합니다.DataTable웹 방식으로 반환할 수 있습니다.

Sample Code 2

언급URL : https://stackoverflow.com/questions/35314515/cannot-serialize-the-datatable-datatable-name-is-not-set

반응형