public void WriteXml(XmlWriter writer, XmlWriteMode mode, bool writeHierarchy)
{
long logScopeId = DataCommonEventSource.Log.EnterScope("<ds.DataTable.WriteXml|API> {0}, mode={1}", ObjectID, mode);
try
{
if (_tableName.Length == 0)
{
throw ExceptionBuilder.CanNotSerializeDataTableWithEmptyName();
}
// Generate SchemaTree and write it out
if (writer != null)
{
if (mode == XmlWriteMode.DiffGram)
{
// Create and save the updates
new NewDiffgramGen(this, writeHierarchy).Save(writer, this);
}
else
{
// Create and save xml data
if (mode == XmlWriteMode.WriteSchema)
{
DataSet ds = null;
string tablenamespace = _tableNamespace;
if (null == DataSet)
{
ds = new DataSet();
// if user set values on DataTable, it isn't necessary
// to set them on the DataSet because they won't be inherited
// but it is simpler to set them in both places
// if user did not set values on DataTable, it is required
// to set them on the DataSet so the table will inherit
// the value already on the Datatable
ds.SetLocaleValue(_culture, _cultureUserSet);
ds.CaseSensitive = CaseSensitive;
ds.Namespace = Namespace;
ds.RemotingFormat = RemotingFormat;
ds.Tables.Add(this);
}
if (writer != null)
{
XmlDataTreeWriter xmldataWriter = new XmlDataTreeWriter(this, writeHierarchy);
xmldataWriter.Save(writer, /*mode == XmlWriteMode.WriteSchema*/true);
}
if (null != ds)
{
ds.Tables.Remove(this);
_tableNamespace = tablenamespace;
}
}
else
{
XmlDataTreeWriter xmldataWriter = new XmlDataTreeWriter(this, writeHierarchy);
xmldataWriter.Save(writer,/*mode == XmlWriteMode.WriteSchema*/ false);
}
}
}
}
finally
{
DataCommonEventSource.Log.ExitScope(logScopeId);
}
}