一种基于SQLite的内外网数据交换方法技术

技术编号:15329627 阅读:113 留言:0更新日期:2017-05-16 13:15
本发明专利技术提供一种基于SQLite的内外网数据交换方法,属于网数据交换领域,本发明专利技术包括:将需要交换的表配置到中间表中;根据预制的表快速导出并生成SQLite的数据库文件;将SQLite的数据库文件导入到系统中;进行数据清除。本方法具有支持增量交换,占用资源低,处理速度快等特点,提高了不连通网络之间数据交换的效率与安全性。

An internal and external network data exchange method based on SQLite

The present invention provides a method for the exchange of internal and external network data based on SQLite, which belongs to the field of network data exchange, the invention includes: the exchange table configuration to the middle of the table; the table according to the prefabricated quickly export and generate the SQLite database file; SQLite database file into the system; data cleaning. The method has the advantages of supporting incremental switching, low resource occupation and fast processing speed, and improves the efficiency and security of data exchange between unconnected networks.

【技术实现步骤摘要】
一种基于SQLite的内外网数据交换方法
本专利技术涉及数据交换技术,尤其涉及一种基于SQLite的内外网数据交换方法。
技术介绍
传统的内外网之间数据交换方法,大多存在着依赖数据库软件,生成文件速度慢,安全性低等问题,并且因为数据交换发生频率高,需要投入较多的时间与人力。SQLite是一种占用资源非常低、处理速度很快的轻型数据库,同时具有零配置、储存在单一磁盘文件中一个完整的数据库等特点。
技术实现思路
为了解决该问题,本专利技术提出了一种基于SQLite的内外网数据交换方法。能够实现不依赖数据库软件,占用空间少,方便快捷地进行数据导入导出,提高了软件的性能和可维护性。一种基于SQLite的内外网数据交换方法,包括1)通过可视化界面将需要交换的表及关键信息配置到中间表中;2)将预制的表根据其交换类型快速导出并生成SQLite的数据库文件;3)将SQLite的数据库文件导入到系统中;进行数据清除。1.配置数据库表。可视化界面预制表名及表的主键,同时选择表的交换类型:全部交换或者增量交换。主要方法如下:privatevoidbtnSave_Click(objectsender,EventArgse){stringsql=string.Empty;OracleConnectioncon=newOracleConnection(this.dbStr);con.Open();OracleCommandcmd=newOracleCommand(string.Empty,con);//先获取交换方式stringtype=cbType.Text.Substring(0,cbType.Text.IndexOf('|'));//验证该表是否存在sql="selectcount(1)fromall_tableswheretable_name='{0}'";sql=string.Format(sql,this.tbTable.Text.Trim());cmd.CommandText=sql;intval=Convert.ToInt32(cmd.ExecuteScalar());if(val==0){MessageBox.Show("数据库中不存在表"+this.tbTable.Text);return;}//验证主键是否存在string[]keys=this.tbKey.Text.Trim().Split(',');foreach(stringkeyinkeys){sql="selectcount(1)fromdba_tab_columnswheretable_name='{0}'andcolumn_name='{1}'";sql=string.Format(sql,this.tbTable.Text.Trim(),key);cmd.CommandText=sql;val=Convert.ToInt32(cmd.ExecuteScalar());if(val==0){MessageBox.Show("该表不存在列名"+key);return;}}//插入导出预置表sql="insertintoJGSJJHDC(JGSJJHDC_ID,JGSJJHDC_Table,JGSJJHDC_Name,JGSJJHDC_Module,JGSJJHDC_TYPE,JGSJJHDC_KEY)values('{0}','{1}','{2}','{3}','{4}','{5}')";sql=string.Format(sql,tbID.Text,tbTable.Text.Trim(),tbName.Text.Trim(),tbModule.Text.Trim(),type,tbKey.Text.Trim());cmd.CommandText=sql;cmd.ExecuteNonQuery();//如果是增量交换,需要创建触发器和时间戳.目的是捕获增量数据if(type=="UP"){//创建触发器TriggerHelperhelper=newTriggerHelper(this.dbStr);cmd.CommandText=helper.GetCreateSql(tbTable.Text.Trim());cmd.ExecuteNonQuery();}con.Close();con.Dispose();this.btnSave.Enabled=false;MessageBox.Show("保存成功!");}2.将预制的表导出并生成SQLite的数据库文件,将表中的数据存储到SQLite数据库的DBF文件中。主要处理包括:2.1、根据预置信息获取需要交换的表;2.2、通过时间戳字段判断符合导出记录条数;2.3、采用ADO.NET直连数据库,将需要导出的数据一一导出并存成一张张DBF表,进行加密存成后缀名为.db的文件;2.4、更新时间戳记录与系统日志。主要方法如下:privatevoidbtnExport_Click(objectsender,EventArgse){floatcount=0.0f;inttotal=0;if(this.tbFile.Text==string.Empty){MessageBox.Show("请选择文件");return;}if(File.Exists(this.tbFile.Text)){MessageBox.Show("此文件已存在,请重新选择");return;}SqlLiteHelpersqllite=newSqlLiteHelper(this.tbFile.Text);this.gridView1.CloseEditor();DataTabledt=(DataTable)this.gridControl1.DataSource;total=dt.Select("selected=True").Length;foreach(DataRowrowindt.Rows){if(Convert.ToBoolean(row["selected"])==false)continue;DataSetds=exportor.GetTableData(row["JGSJJHDC_Table"].ToString());//拷贝数据sqllite.CopyDataTable(ds.Tables[0],row["JGSJJHDC_Table"].ToString());//记录最大时间戳if(row["JGSJJHDC_Type"].ToString().ToUpper()=="UP")exportor.RecordLastStamp(row["JGSJJHDC_Table"].ToString());//导出删除数据,导完之后还要清空DataTabledtDelete=exportor.GetDeleteData(row["JGSJJHDC_Table"].ToString());if(dtDelete.Rows.Count>0){sqllite.CopyDataTable(dtDelete,"JGSJJHSC");exportor.RemoveDeleteData(row["JGSJJHDC_Table"].ToStr本文档来自技高网...

【技术保护点】
一种基于SQLite的内外网数据交换方法,其特征在于,包括1)通过可视化界面将需要交换的表及关键信息配置到中间表中;2)将预制的表根据其交换类型快速导出并生成SQLite的数据库文件;3)将SQLite的数据库文件导入到系统中;进行数据清除。

【技术特征摘要】
1.一种基于SQLite的内外网数据交换方法,其特征在于,包括1)通过可视化界面将需要交换的表及关键信息配置到中间表中;2)将预制的表根据其交换类型快速导出并生成SQLite的数据库文件;3)将SQLite的数据库文件导入到系统中;进行数据清除。2.根据权利要求1所述的方法,其特征在于,在1)中,通过所见即所得的可视化界面预制表名及表的主键,同时选择表的交换类型:全部交换或者增量交换,存入数据库中;代码如下privatevoidbtnSave_Click(objectsender,EventArgse){stringsql=string.Empty;OracleConnectioncon=newOracleConnection(this.dbStr);con.Open();OracleCommandcmd=newOracleCommand(string.Empty,con);//先获取交换方式stringtype=cbType.Text.Substring(0,cbType.Text.IndexOf('|'));//验证该表是否存在sql="selectcount(1)fromall_tableswheretable_name='{0}'";sql=string.Format(sql,this.tbTable.Text.Trim());cmd.CommandText=sql;intval=Convert.ToInt32(cmd.ExecuteScalar());if(val==0){MessageBox.Show("数据库中不存在表"+this.tbTable.Text);return;}//验证主键是否存在string[]keys=this.tbKey.Text.Trim().Split(',');foreach(stringkeyinkeys){sql="selectcount(1)fromdba_tab_columnswheretable_name='{0}'andcolumn_name='{1}'";sql=string.Format(sql,this.tbTable.Text.Trim(),key);cmd.CommandText=sql;val=Convert.ToInt32(cmd.ExecuteScalar());if(val==0){MessageBox.Show("该表不存在列名"+key);return;}}//插入导出预置表sql="insertintoJGSJJHDC(JGSJJHDC_ID,JGSJJHDC_Table,JGSJJHDC_Name,JGSJJHDC_Module,JGSJJHDC_TYPE,JGSJJHDC_KEY)values('{0}','{1}','{2}','{3}','{4}','{5}')";sql=string.Format(sql,tbID.Text,tbTable.Text.Trim(),tbName.Text.Trim(),tbModule.Text.Trim(),type,tbKey.Text.Trim());cmd.CommandText=sql;cmd.ExecuteNonQuery();//如果是增量交换,需要创建触发器和时间戳.目的是捕获增量数据if(type=="UP"){//创建触发器TriggerHelperhelper=newTriggerHelper(this.dbStr);cmd.CommandText=helper.GetCreateSql(tbTable.Text.Trim());cmd.ExecuteNonQuery();}con.Close();con.Dispose();this.btnSave.Enabled=false;MessageBox.Show("保存成功!");}。3.根据权利要求1所述的方法,其特征在于,在2)中,选择需要导入的数据库文件,采用ADO.NET直接操作数据库,将表中的数据存储到中间库-SQLite数据库的DBF表中,同时进行加密处理,并创建索引与日志;其中增量交换是通过设置时间戳字段自动判断需要导出的数据;主要处理包括:2.1)、根据预置信息获取需要交换的表;2.2)、通过时间戳字段判断符合导出记录条数;2.3)、采用ADO.NET直连数据库,将需要导出的数据一一导出并存成一张张DBF表,进行加密存成后缀名为.db的文件;2.4)、更新时间戳记录与系统日志;代码如下:privatevoidbtnExport_Click(objectsender,EventArgse){floatcount=0.0f;inttotal=0;if(this.tbFile.Text==string.Empty){MessageBox.Show("请选择文件");return;}if(File.Exists(this.tbFile.Text)){MessageBox.Show("此文件已存在,请重新选择");return;}SqlLiteHelpersqllite=newSqlLiteHelper(this.tbFile.Text);this.gridView1.CloseEditor();DataTabledt=(DataTable)this.gridControl1.DataSource;total=dt.Select("selected=True").Length;foreach(DataRowrowindt.Rows){if(Convert.ToBoolean(row["selected"])==false)continue;DataSetds=exportor.GetTableData(row["JGSJJHDC_Table"].ToString());//拷贝数据sqllite.CopyDataTable(ds.Tables[0],row["JGSJJHDC_Table"].ToString());//记录最大时间戳if(row["JGSJJHDC_Type"].ToString().ToUpper()=="UP")exportor.RecordLastStamp(row["JGSJJHDC_Table"].ToString());//导出删除数据,导完之后还要清空DataTabledtDelete=exportor.GetDeleteData(row["JGSJJHDC_Table"].ToString());if(dtDelete.Rows.Count>0){sqllite.CopyDataTable(dtDelete,"JGSJJHSC");exportor.RemoveDeleteData(row["JGSJJHDC_Table"].ToString());}count++;this.pbTotal.Show();this.pbTotal.Value=Convert.ToInt32((float)count/total*100);}////导出索引表sqllite.CopyDataTable(dt,"JGSJJHDC");this.pbTotal.Value=0;MessageBox.Show("导出成功!");}。4.根据权利要求1所述的方法,其特征在于,在3)中,在需要导入数据的网络中,选择之前导出的后缀名为.db的文件,解密后将其中的DBF表读出来并放到数据实体类中,利用BulkCopy方法,通过数据库事务将数据一次性全部导入;代码如下:publicvoidImp...

【专利技术属性】
技术研发人员:黄金港陈吉利张华青
申请(专利权)人:济南浪潮高新科技投资发展有限公司
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1