基于.Net的Excel和数据库数据转换

来源 :计算机时代 | 被引量 : 0次 | 上传用户:tytytytytytytytytyty
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: 根据军事理论练习系统的需求,分析了将Excel电子表格中的试题数据导入到Access数据库中,以及将学生成绩等信息导出到Excel电子表格的原理和方法,并应用于实际解决方案,有效提高了工作效率。
  关键词: .Net; Excel; 数据库; 数据转换
  中图分类号:TP393 文献标志码:A 文章编号:1006-8228(2013)05-33-04
  Conversion of Excel and data in the database based on .NET
  ——take military theory practice system as an example
  Wang Yilfei
  (Comprehensive experimental teaching center of arts, Zhejiang normal university, Jinhua, Zhejiang 321004, China)
  Abstract: According to requirements of the military practice theory system, the principles of importing the data of examination questions to Access database and exporting the students' information, such as marks to the spreadsheet of Excel, are analyzed. These principles, which can improve the working efficiency, are applied to the practical solutions.
  Key words: .Net; Excel; database; data conversion
  0 引言
  軍事理论练习系统是在浙江省军事理论教育基础上,供学生练习军事理论知识的系统。通过练习可使学生掌握相关军事理论基础知识,增强学生国防、爱国意识。
  该系统是一个基于Web的.NET应用程序,数据库服务器采用Access数据库。在开发该系统时,原始试题库是以Excle电子表格格式(.xls)存在,并且需要将学生成绩导出到Excle电子表格中,因此手工操作任务繁重,效率低下。故需要实现Excle电子表格和Access数据库之间的数据转换。
  1 .Net中数据转换的原理分析
  本文将Excel电子表格中的数据提取到Access数据库中的过程称为数据的导入,反之将Access数据库中的数据提取到Excel电子表格的数据称为数据的导出,通过.Net平台实现,基本框架如图1所示。
  [数据库] [.NET平台] [Excel]
  图1
  1.1 从Excel表格中导入数据至数据库
  1.1.1 使用数据库管理工具实现
  某些数据库管理工具会提供相应的工具,将Excel电子表格的数据导入到相应的数据库中,如Sql Server 2000提供了“导入数据”功能,通过DTS 导入/导出向导,方便实现数据的导入。
  1.1.2 编写代码实现
  通过.NET编写代码也可实现将Excel电子表格中的数据导入数据库,实现过程如图2所示。
  [Excel] [DataSet] [Access]
  图2
  具体实现步骤是:将Excel电子表格作为数据源,通过.NET Framework提供的相关类库,将Excel数据源中的数据导入到DataSet中,然后将DataSet中的数据以循环的方式依次插入数据库中。
  下面为.NET相关类库的介绍。
  ⑴ 公共类。.Net提供的断开连接时数据的脱机容器相关类有以下。
  a. DataSet:这个对象主要用于断开数据库连接时,是数据的脱机容器,它包含一组DataTable,以及这些表之间的关系。
  b. DataTable:数据的一个容器,DataTable由一个或多个DataColumn组成,每个DataColumn由一个或多个包含数据的DataRow组成。
  c. DataRow:包含许多数值,类似于数据库表中的一行或电子表格中的一行。
  d. DataColumn:包含列的定义,例如列名称和数据类型。
  e. DataRelation:DataSet中两个DataTable之间的关系,用于外键和主从关系。
  f. Constraint:为DataColumn(或一组数据列)定义规则,例如惟一值。
  DataSet中各个类的关系如图3所示。
  [DataSet] [Tables] [DataTables] [Columns] [Rows] [Constraints] [DataColumn] [DataRow] [Constraint] [Tables] [Tables]
  图3 DataSet中各个类的关系图
  ⑵ 操作数据库的类。每个特定的数据库都会有特定的数据库连接的类,这里以Access数据库为例介绍这些类。
  a. OleDbConnection:数据库连接对象,用于创建一个程序和access数据库的连接。
  b. OleDbCommand: 表示要对数据源执行的 SQL 语句或存储过程。
  c. OleDbCommandBuilder:用于从一个SELECT语句中生成Sql命令。自动生成用于协调对 DataSet 的更改与关联数据库的单表命令。   d. OleDbDataAdapter:用于存储选择、插入、更新和删除语句的类,也可以用于生成DataSet和更新数据库。
  使用相关类的流程是:通过OleDbConnection类建立一个与数据库的连接,然后建立OleDbCommand对象,传入要执行的sql语句和要使用的连接,然后选择要执行的操作(例如执行插入或更新操作)[1]。
  1.2 将数据库中的数据导出至Excel电子表格
  1.2.1 使用数据库管理工具实现
  Excle的數据导出,有些数据库管理工具也提供了相应的转换工具。如sql server 2000“企业管理器”工具,提供了数据的导出功能,可以将数据导出至Excle电子表格。
  1.2.2 编码方式实现
  将数据导出至Excel电子表格文件,也可类似于将Excel电子表格中的数据导入到数据库的方法,将Excel电子表格当作数据源对其进行操作。
  另一种方法是使用Excel文档对象,建立一个Excel文档,然后将数据插入文档中,实现过程如下:
  [Access] [DataSet] [Excel文档对象] [Excel]
  由于Excel文档中的数据是高度结构化的,因此该对象模型也具有层次结构并且简单明了。Excel提供了数百个可能需要与之交互的对象,完成数据导出只需掌握少数几个对象模型。这些对象包括四种:
  [ ][Application][ ][WorkBook][ ][WorkSheet][ ][Range]
  ⑴ Application对象
  Microsoft.Office.Interop.Excel.Application类表示Excel应用程序本身。该类公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息[2]。
  ⑵ Workbook对象
  Microsoft.Office.Interop.Excel.Workbook类表示Excel应用程序内的单个工作簿,是Workbooks集合的成员[2]。
  ⑶ Worksheet对象
  Microsoft.Office.Interop.Excel.Worksheet类表示Excel应用程序内的单个工作表,是Worksheets集合的成员。Microsoft.Office.Interop.Excel.Worksheet的许多属性、方法和事件与 Application或Microsoft.Office.Interop.Excel.Workbook类提供的成员完全相同或相似[2]。
  ⑷ Range对象
  Microsoft.Office.Interop.Excel.Range对象是Excel应用程序中最常用的对象。在能够处理 Excel 内的任何范围之前,必须将它表示为Range对象,并处理该对象的方法和属性。Range对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至可以是多个工作表中的一组单元格[2]。
  要建立一个完整的Excel电子表格,就必须通过以上的对象来完成。
  1.3 实现方式的比较
  要实现Excel电子表格和数据库之间的通讯,可以使用数据库管理系统提供的相关工具进行导入和导出操作,但使用这种方法的缺点是,我们不能根据我们的需要对导入数据库的数据进行更改,同样的当导出时我们也不能根据我们的需要添加其他信息。因此,本系统采用编写代码的方式实现Excel电子表格和数据库之间的数据转换。
  1.4 使用多线程技术
  线程是程序中独立的指令流,使用C#编写任何程序时,都有一个入口:Main()方法。程序从Main方法的第一条语句开始执行,直到这个方法为止,Main()方法的执行是在一个线程中即主线程。在应用程序中,当用户在一个任务正在执行的过程中,希望执行其他的任务时,应使用多线程技术实现。如在使用Microsoft Word时,当我们输入英文单词时,该软件也会对单词进行拼写检查,此外还有一个线程将Word文档自动保存至临时文件中等等,这些功能都是同时工作的,即使用了多线程技术[3]。
  在C#中,多线程的实现主要有两种方法。
  ⑴ 通过异步委托实现线程
  委托是一种特殊的对象类型,一般对象类型都包含数据,但委托只包含方法的地址,可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法,可以创建一个自定义方法,当发生特定事件时某个类(如LABLE控件)就可以调用该方法。以下给出具体操作步骤[3]。
  a. 定义了一个委托:
  public delegate int DelegateAdd(int x, int y);
  该示例定义了一个委托(DelegateAdd),而且定义该委托的每个实例都包含一个方法的细节,该方法带有两个int类型的参数(x,y),且返回值是int类型的。
  b. 定义一个方法:
  Public int add(int x,int y)
  { return x+y;
  }
  该方法的定义符合委托的要求(两个int类型的参数,int类型的返回值)。
  c. 将委托实例化:
  delegate Add=new DelegateAdd (add);
  即将委托指向方法的地址,然后操作委托调用方法:
  Int z=delegateAdd(1,2);   ⑵ 通过Thread类实现多线程
  Thread类是.NET框架中的一个多线程类,使用该类可以创建和控制线程。使用该线程类的步骤主要是:
  a. 创建一个方法,并不直接在主线程使用而是通过线程调用:
  Public void threadDemo()
  { Console.WriteLine("test");
  }
  b. 创建一个线程,并使该线程指向方法的引用,代码如下:
  Thread t=new Thread(threadDemo);
  该代码定义了一个线程类(t),并使该示例指向。
  c. 启动线程:
  // 开启线程
  t.Start();
  //线程休眠
  Thread.Sleep(0);[3]
  2 具体实现
  为了方便操作,把对数据库的操作封装在一个类中。取名为LinkDataBase.cs,该类主要实现数据库数据的增、删、改、查等操作。
  2.1 导入
  Public void ExcelToDB() {
  //Excel电子表格连接字符串
  string ExcelConnString=string.Format("Provider=Microsoft.Jet.
  OLEDB.4.0;Data Source={0}; Extended Properties
  =Excel8.0;",
  openFileDialog1.FileName);
  //Access数据库连接字符串
  string AccessConnString=string.Format("Provider=Microsoft
  .Jet.OLEDB.4.0;Data Source={0};User ID=;Password=;",
  Application.StartupPath+"\\Data.mdb");
  //创建与Excel电子表格的连接
  OleDbConnection ExcelConnection=new OleDbConnection
  (ExcelConnString);
  //打开一个电子表格的连接
  ExcelConnection.Open();
  //执行的SQL语句
  string strExcel="select * from [jichu$]";
  //通过打开的连接(ExcelConnection),执行指点的SQL语句
  (strExcel)
  OleDbDataAdapter ExcelCommand=new OleDbDataAdapter
  (strExcel, ExcelConnection);
  //创建一个脱机容器,并将查询数据生成(ExcelCommand.Fill())
  到这个脱机容器(ds)中
  DataSet ds=new DataSet();
  ExcelCommand.Fill(ds,"DB_Base");
  //将查找到的表保存至access数据库
  foreach (DataRow dr in ds.Tables[0].Rows)
  { //创建Access数据库的连接并打开一个连接
  OleDbConnection AccessConnection=new
  OleDbConnection(AccessConnString);
  AccessConnection.Open();
  //通过可用连接将数据通过SQL语句插入到Access数据库中
  OleDbCommand AccessCommand=new OleDbCommand
  ("insert into DB_Base values("+dr[0]+",'"+dr[1]+"',
  '"+dr[2]+"','"+dr[3]+"','"+dr[4]+"','"+dr[5]+"','"+dr[6]+"',
  '"+dr[7]+"','"+dr[8]+"','"+dr[9]+"')", AccessConnection);
  AccessCommand.ExecuteNonQuery();
  //關闭连接
  accessConnection.Close();
  }
  }
  2.2 导出
  Public void DBToExcel() {
  //初始化Excel电子表格文档对象
  m_objRange=null; //工作表中区间对象
  m_objSheet=null; //工作表对象
  m_objSheets=null; //工作表集合对象
  m_objBooks=null; //工作薄集合对象
  m_objBook=null; //工作薄对象
  m_objExcel=null; //Excel对象
  object[] objHeaders=null;
  int nFields=0;//记录字段总数
  DataSet ds=new DataSet();   // Start a new workbook in Excel.
  //新建一个Excel应用程序,进而建立一个工作薄
  m_objExcel=new Excel.Application();
  m_objBooks=(Excel.Workbooks)m_objExcel.Workbooks;
  m_objBook=(Excel._Workbook)(m_objBooks.Add(m_objOpt));
  //在工作薄中找到第一个工作表
  m_objSheets=(Excel.Sheets)m_objBook.Worksheets;
  m_objSheet=(Excel._Worksheet)(m_objSheets.get_Item(1));
  //查找数据库中的数据
  DataTable dt=dbhelp.SelectDataBase("select * from users");
  nFields=dt.Columns.Count;//得到记录数
  objHeaders=new object[nFields];
  int i=0;
  //得到数据库的字段名
  foreach (DataColumn dc in dt.Columns)
  { objHeaders[i]=dc.ColumnName;
  i++;
  }
  //设置单元格格式
  m_objRange=m_objSheet.get_Range("A1", m_objOpt);
  m_objRange.EntireColumn.NumberFormatLocal="@";
  //設置单元格每一列标题,以数据库字段命名
  m_objRange=m_objRange.get_Resize(1, nFields);
  m_objRange.Value2=objHeaders;
  //将数据依次插入单元格
  for (int j=0; j  { for (int k=0; k  { m_objRange.Cells[j+2, k+1]=dt.Rows[j][k];
  }
  }
  //保存电子表格
  m_objBook.SaveAs(m_strSampleFolder+"book.xls",m_objOpt,
  m_objOpt,m_objOpt, m_objOpt, m_objOpt,
  Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt,
  m_objOpt, m_objOpt, m_objOpt, m_objOpt);
  m_objBook.Close(false, m_objOpt, m_objOpt);
  //退出电子表格应用程序
  m_objExcel.Quit();
  }
  2.3 多线程技术的使用
  当导入导出的数据量比较小时,基本上不需要使用多线程,但当导入导出的数据量较大时,不使用多线程技术就会产生“假死”现象,而使用多线程可以很好地解决这一问题。
  3 结束语
  军事理论练习系统实现了C#将Exclel电子表格中的数据转换到Access数据中,同时也实现了将Access数据库的数据导出到Excel电子表格。通过相关方法的扩展,我们可以实现Excel电子表格与任何关系型数据库的数据相互转换;可将其应用于其他软件或系统中,以提高效率。
  参考文献:
  [1] Christian Nagel等著,李铭翻译.C#高级编程(第6版)[M].清华大学
  出版社,2008.
  [2] 王毅飞.基于网络协同的IT技能计算机辅助评价系统研究[D].浙江
  师范大学硕士学位论文,2011.
  [3] 张焰林.基于VB.NET的多线程技术应用[J].计算机系统应用,
  2009.2.
  [4] 张文博,余文芳.ASP.NET编程中对Excel文档操作的探讨及应用[J].
  计算机系统应用,2010.19(3).
  [5] 张丽英.基于.NET的Excel数据批量导入SQLServer的设计与实现[J].
  南通纺织职业技术学院学报,2012.1.
其他文献
摘 要: 分析了目前高校多出口网络环境下存在的诸多问题,提出了适合青岛职业技术学院现状的解决方案,即利用DNS view功能实现按源请求地址返回服务器不同IP地址,并配合防火墙路由策略较好地解决了校外用户快速访问校内资源,以及校内用户快速访问互联网的问题。  关键词: 多出口环境; 路由策略; DNS VIEW; 校园网  中图分类号:TP393.07 文献标志码:A 文章编号:1006-8228
期刊
摘 要: 传统的人才储备库系统已不能适应现在的市场需求,因此提出以“订单式教育”的模式开发、设计和实现职业院校人才储备库系统。针对南宁职业院校和人才市场进行了需求分析,明确系统的主要设计目标、总体框架和主要模块功能,提出了“订单式教育”软件的实现模型和解决方案。已取得的阶段性成果是为职业院校和企业决策层提供了“订单式”人才数据分析系统。总结分析了未来的研究开发方向和面临的问题。  关键词: 职业院
期刊
摘 要: 为了方便快捷地为旅客提供旅游信息,设计并开发了一个基于安卓操作系统的西北地区旅游信息查询系统。该系统基于C/S模式,服务器端使用JSP语言和Struts2+Spring+Hibernate开源框架编写,实现旅游景点信息的浏览、添加、修改和删除,同时为客户端提供下载和更新数据的接口;客户端为基于Android平台的智能手机,可以浏览、搜索旅游景点信息,也可以通过无线网络从服务器端下载和更新
期刊
摘 要: 针对一维下料优化问题,在对一维下料方案数学模型分析的基础上,提出了基于改进遗传算法的优化求解方案。主要思想是把零件的一个顺序作为一种下料方案,定义了遗传算法中的关键问题:编码、解码方法、遗传算子和适应度函数的定义。该算法设计了一种新颖的遗传算子,包括顺序交叉算子、线性变异算子、扩展选择算子。根据这一算法开发出了一维下料方案的优化系统。实际应用表明,该算法逼近理论最优值,而且收敛速度快,较
期刊
摘 要: 介绍了知识可视化的基本概念,特别是知识可视化工具中最为人熟知的思维导图。以“网络设备配置与管理”实验课程为例,结合具体的MindMapper软件探索了在实验课教学中的创新型应用。实践证明,在教学中引入知识可视化的理念和方法,可以有效地促进课堂教学效率和质量的提高。  关键词: 知识可视化; 思维导图; 实验教学; MindMapper  中图分类号:G642 文献标志码:A 文章编号:1
期刊
摘 要: 介绍了调用.NET框架中TripleDESCryptoServiceProvider类、设计TripleDES算法的加密器、实现计算机文件数据加密与解密的方法。使用这种加密器对文件进行加密、解密,既方便又快捷,达到了预期的效果。  关键词: 对称密钥; TripleDESCryptoServiceProvider类; CryptoStream类; 加密  中图分类号:TP309.7 文献
期刊
摘 要: 围绕云环境下安全模式与传统安全模式的差异,结合信息安全保障要求,对三种不同的云服务模式(包括IaaS,PaaS和SaaS)进行了安全需求分析,同时对美国云计算联邦风险评估管理计划 (FedRAMP)中的安全控制措施和国内相关信息安全标准中的安全要求进行了对比分析,提出了云计算信息安全测评的基本框架,探讨了云计算信息安全测评需要特别关注的内容。  关键词: 云计算; 云服务模式; 信息安全
期刊
摘 要: 以南京农业大学工学院应用为例,利用数据挖掘工具实现对计费网关日志数据的采集,并对用户群体行为即不同时间段的在线账号数、用户使用时长与流量、用户访问目的地址三个方面进行研究。对如何改进高校网络舆情监控建设,培育健康和谐的网络舆论生态给出了若干对策与建议。  关键词: 数据挖掘; 计费网关; 舆情监控; 行为分析  中图分类号:G41 文献标志码:A 文章编号:1006-8228(2013)
期刊
摘 要: 首先简要介绍了嘉应学院科研管理系统的体系结构设计、系统的功能设计;然后以科研项目管理为例,详细论述了系统模块设计中业务流程分析和方法类设计;最后设计出了基于Struts+Spring+Hibernate框架的科研管理系统。  关键词: 科研; 管理系统; 框架; 设计  中图分类号:TP302.1 文献标志码:A 文章编号:1006-8228(2013)10-75-03  0 引言  在
期刊
摘 要: 空间教学是当前高职院校流行的辅助教学活动。以“单片机技术应用”课程为例探讨在空间教学实施过程中如何培养学生的学习兴趣,提高教学水平和效果,培养学生的职业核心能力。  关键词: 空间教学; 职业核心能力; 教学活动; 单片机技术应用  中图分类号:G710 文献标志码:A 文章编号:1006-8228(2013)05-51-03  Cultivation of core professio
期刊