博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XmlTextReader实例(加载表数据)
阅读量:7106 次
发布时间:2019-06-28

本文共 11654 字,大约阅读时间需要 38 分钟。

以下代码是读取xml的内容,包括列字段信息和表数据.采用线程读取各个表的数据.针对特定的XML格式 

private string fileName;        private XmlTextWriter writer;        ///         /// 数据库类型        ///         private DataBaseType dataBaseType;        ///         /// 表名        ///         private DataTable tableNames = new DataTable();        private Dictionary
tableSchemas = new Dictionary
(); private Dictionary
tableDatas = new Dictionary
(); private Dictionary
tableSQLs = new Dictionary
(); private Dictionary
tableColInfos = new Dictionary
(); ///
/// 读取数据时必须先调用 LoadOffLineData() /// 写数据时必须先调用 InitXmlTextWriter() /// ///
public FileHelper(string fileName) { this.fileName = fileName; }
相关定义

 

///         /// 根据类型名称获取对应的类型        ///         ///         /// 
private Type GetType(string typeName) { Type type = typeof(Object); typeName = typeName.ToLower().Trim(); switch (dataBaseType) { case DataBaseType.Access: break; case DataBaseType.DB2: break; case DataBaseType.MySql: break; case DataBaseType.Odbc: break; case DataBaseType.Oracle: break; case DataBaseType.SqlCe: break; case DataBaseType.SqlServer: switch (typeName) { case "int": case "smallint": case "bigint": type = typeof(int); break; case "bit": type = typeof(Boolean); break; case "datetime": case "smalldatetime": type = typeof(DateTime); break; case "decimal": case "numeric": case "smallmoney": type = typeof(Decimal); break; case "float": type = typeof(Double); break; case "image": case "money": case "binary": case "sql_variant": case "timestamp": case "varbinary": case "uniqueidentifier": case "xml": type = typeof(Object); break; case "ntext": case "varchar": case "nvarchar": case "text": case "nchar": case "char": type = typeof(String); break; case "real": type = typeof(Single); break; case "tinyint": type = typeof(Byte); break; } break; } return type; }
GetType

 

///         /// 加载离线数据        ///         /// 
public bool LoadOffLineData() { XmlTextReader reader = new XmlTextReader(fileName); tableNames.Columns.Add("name"); if (reader.ReadToFollowing("database")) { try { dataBaseType = (DataBaseType)Enum.Parse(typeof(DataBaseType), reader.GetAttribute("databasetype")); while (reader.ReadToFollowing("table")) { tableNames.Rows.Add(reader.GetAttribute("name")); Thread th = new Thread(AnalyzeTableXml); th.Start(reader.ReadOuterXml()); } } catch (Exception err) { dataBaseType = DataBaseType.SqlServer; this.LogWrite(LogType.Error, "加载离线数据出错!", err); return false; } } reader.Close(); return true; }
LoadOffLineData
///         /// 分析表结构与读取表数据        ///         ///         private void AnalyzeTableXml(object obj)        {            string tableName = "";            try            {                XmlTextReader reader = new XmlTextReader(obj.ToString(), XmlNodeType.Document, null);                if (reader.ReadToFollowing("table"))                {                    //作为Key值,表名全为小写                    tableName = reader.GetAttribute("name").Trim().ToLower();                    DataTable dtSchema = new DataTable();                    DataTable dtColInfo = new DataTable();                    DataTable dataDt = new DataTable();                    dtSchema.TableName = tableName;                    dtColInfo.TableName = tableName;                    dataDt.TableName = tableName;                    tableSchemas.Add(tableName, dtSchema);                    tableColInfos.Add(tableName, dtColInfo);                    tableDatas.Add(tableName, dataDt);                    //读取建表语句                    if (reader.ReadToDescendant("createsql") && !reader.IsEmptyElement)                    {                        tableSQLs.Add(tableName, reader.ReadElementString().Trim());                    }                    else                    {                        this.LogWrite(LogType.Info, "表[{0}]没有建表语句!".Formats(tableName));                    }                    //读取列(结构)                    if (reader.ReadToNextSibling("columns") && !reader.IsEmptyElement)                    {                        //第一列                        if (reader.ReadToDescendant("column"))                        {                            AddColumn(reader, dtSchema);                            AddColInfo(reader, dtColInfo);                            dataDt.Columns.Add(reader.GetAttribute("col_name"));//添加列                            //循环读取其它列                            while (reader.ReadToNextSibling("column"))                            {                                AddColumn(reader, dtSchema);                                AddColInfo(reader, dtColInfo);                                dataDt.Columns.Add(reader.GetAttribute("col_name"));//添加列                            }                        }                    }                    else                    {                        this.LogWrite(LogType.Info, "表[{0}]没有结构信息!".Formats(tableName));                        return;                    }                    //读取行(数据)                    if (reader.ReadToNextSibling("rows") && !reader.IsEmptyElement)                    {                        //第一行                        if (reader.ReadToDescendant("row") && !reader.IsEmptyElement)                        {                            do                            {                                //第一单元格                                if (reader.ReadToDescendant("cell"))                                {                                    DataRow dr = dataDt.Rows.Add();                                    dr[reader.GetAttribute("columnname")] = reader.ReadElementString().Trim();                                    //循环读取其它单元格                                    while (reader.ReadToNextSibling("cell"))                                    {                                        dr[reader.GetAttribute("columnname")] = reader.ReadElementString().Trim();                                    }                                }                            }                            while (reader.ReadToNextSibling("row") && !reader.IsEmptyElement);                        }                    }                }                reader.Close();            }            catch (Exception err)            {                this.LogWrite(LogType.Error, "分析表[{0}]XML出错!".Formats(tableName), err);            }        }
AnalyzeTableXml
///         /// 添加列        ///         ///         ///         private void AddColumn(XmlTextReader reader, DataTable dtSchema)        {            DataColumn dc = dtSchema.Columns.Add(reader.GetAttribute("col_name"));            dc.DataType = GetType(reader.GetAttribute("col_typename"));            dc.AllowDBNull = bool.Parse(reader.GetAttribute("col_null"));            dc.AutoIncrement = bool.Parse(reader.GetAttribute("col_identity") == "" ? "false" : reader.GetAttribute("col_identity"));            if (dc.AutoIncrement)            {                dc.AutoIncrementSeed = long.Parse(reader.GetAttribute("col_seed") == "" ? "0" : reader.GetAttribute("col_seed"));                dc.AutoIncrementStep = long.Parse(reader.GetAttribute("col_increment") == "" ? "0" : reader.GetAttribute("col_increment"));            }            if (dc.DataType == typeof(string))            {                dc.MaxLength = Int32.Parse(reader.GetAttribute("col_len") == "" ? Int64.MaxValue.ToString() : reader.GetAttribute("col_len"));            }        }
AddColumn
///         /// 添加列的行信息        ///         ///         ///         private void AddColInfo(XmlTextReader reader, DataTable dtColInfo)        {            DataRow dr = dtColInfo.Rows.Add();            for (int i = 0; i < reader.AttributeCount; i++)            {                reader.MoveToAttribute(i);                if (!dtColInfo.Columns.Contains(reader.Name))                {                    dtColInfo.Columns.Add(reader.Name);                }                dr[reader.Name] = reader.Value;            }        }
AddColInfo
CREATE TABLE [dbo].[IncidentTemplate]( [ID] [int] IDENTITY(1, 1) NOT NULL, [alarmtype] [int] NULL, [content] [nvarchar](2000) NULL, CONSTRAINT [PK_INCIDENTTEMPLATE] PRIMARY KEY CLUSTERED([ID]))EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'案件模板' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'IncidentTemplate'EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'序号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'IncidentTemplate', @level2type=N'COLUMN', @level2name=N'ID'EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'案件性质' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'IncidentTemplate', @level2type=N'COLUMN', @level2name=N'alarmtype'EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'模板内容' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'IncidentTemplate', @level2type=N'COLUMN', @level2name=N'content'
54
151
55
160
56
155
57
158
62
131
63
149
64
174
xml

 

转载于:https://www.cnblogs.com/jchen361/p/3990885.html

你可能感兴趣的文章
js与php传递参数
查看>>
[转]DPM2012系列之六:在Win7上安装DPM远程管理控制台
查看>>
MSSQL清理日志
查看>>
Class hierarchy of UIResponder as well as subclasses of UIView and UIControl
查看>>
IntelliJ IDEA + Maven环境编写第一个hadoop程序
查看>>
OpenGL应用函数库介绍
查看>>
常量、枚举
查看>>
条件变量与互斥量
查看>>
Jenkins-Publish HTML reports
查看>>
KVO 键值观察
查看>>
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
查看>>
Adaptability Is Accessibility
查看>>
HDU_1227_Fast Food_动态规划
查看>>
实验验证redis的快照和AOF
查看>>
临时表的应用
查看>>
码农的福利来了, 编程在线Androd 客户端上线了
查看>>
sys.stdout.write与sys.sterr.write(二)
查看>>
多继承时,多个基类中存在型别相同的虚函数,该怎么做?
查看>>
shell配置,选择,环境变量修改(ORACLE_HOME,ORACLE_SID),无法使用sqlplus
查看>>
Design Hint for Inheritance(继承设计的一些小贴士)
查看>>