论文部分内容阅读
摘要:基于web方式BS应用模式下,使用C#.net编程工具实现oracle数据库记录与Excel工作表数据交换的解决方案及实现案例。
关键词:c#;BS模式;Excel;导入导出;应用
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)06-11492-02
随着计算机网络技术的发展,INTERNET技术正带领信息科技进入新的信息时代,以Web为中心进行构建,采用B/S结构开发信息系统已经成为潮流。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装racle、Sybase、Informix或 SQL Server等数据库。浏览器就可以通过Web Server 同数据库进行数据交互。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。但它的缺点是打印和Excel表的数据交换不如C/S(Client/Server)模式方便,在水晶报表Crystal Reports下,C/S模式直接具有导出Excel表的功能,可在B/S的Web模式下就显得很困难。本文在此通过案例介绍一种基于Web使用C#.NET编程完成Oracle数据库与Excel表数据交换的解决方案。
1 开发工具介绍及设计思想
1.1微软.Net技术
Microsoft .NET 是微软公司的一组软件技术,用来连接信息、人、系统和各种设备。它通过使用 Web Services 技术来获得软件的高度集成。除了将小型的、分散的、构建模块应用互相连接起来,还将 Internet 上的更大应用连接起来。目前随着互联网上各种标准协议以及 .NET框架的日益成熟,开发互联网应用的首推工具为微软.NET框架。C#是微软基于.net框架由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,C#意在综合Visual Basic的高效率和C++的强大功能。C#将是完全依靠Windows的最完美的产物。C#(发音为“C-Sharp”)既保持了C++中熟悉的语法,并且还包含了大量的高效代码和面向对象特性。它不仅能用于WEB服务程序的开发,并且还能开发强大的系统级程序。因此我们选择C#.net作为开发工具。
1.2Oracle数据库技术
Oracle数据库是目前世界上应用较广的大型关系数据库产品之一,Oracle 8i将Java虚拟机完全集成于自身数据库之中,通过对Java开发环境的全面支持,成为第一款具有容错功能的可伸缩Java部署平台,能给互联网的应用软件提供一个更加完善的平台。对于浏览器方式的应用,用户端只需用标准的浏览器,就可以访问数据,进行交易处理,而不需专门的用户端程序,尤其适用于大量移动分布式用户群。Oracle还提供了一个工具Oracle WebDB,可以用来建立、部署和监控网络数据库应用和网站,它有一组基于浏览器HTML工具,提供快速简便的方式访问Oracle数据库,能够用标准的Web浏览器显示,可以在任何与网络相连的地方通过浏览器开发、部署、管理和配置网上应用。
1.3设计思想
该案例的目的是:将存放在本地(客户浏览器端)的Excel文件(扩展名为.xls)中的单元格数据记录导入到远程非本地(主机服务器端)Oracle数据库服务器中形成数据记录;然后在网页中使用DataGrid显示出来;最后再将DataGrid显示的数据记录导出到本地,形成Excel格式的.xls文件。
在设计过程中,我们采用的过程和方式是:(1)在oracle数据库中建立与Excel文件相应的对照字段;(2)使用c#编程命令将Excel文件采用上传的方式上传到服务器上指定的目录;(3)将此上传的Excel格式文件导入到Oracle数据库;(4)能使用DataGrid显示浏览出来;(5)使用c#编程命令书写程序将DataGrid中显示的Oracle数据库中的记录导出为Excel格式文件存放在本地,考虑到DataGrid中数据显示有分页的可能,我们导出时使用数据集Dataset方式导出,分导出本页和全部页两种。
2 开发实例及程序源码
2.1上传Excel前的准备工作:
(1)在oracle数据库中建立如下基因临时表(图1)的数据库表及字段。
图1 基因临时表
(2)整理一下如下的Excel表,建立与之数据库相对应的字段。
2.2界面和程序设计:
2.2.1上传设计:
(1) Web界面:如下(图2)
图2
(2)上传程序代码:
private void btUpload_Click(object sender, System.EventArgs e){
System.IO.DirectoryInfo dirfiles;
System.IO.FileInfo[] files;
dirfiles= new DirectoryInfo(Server.MapPath(@".\ExcelFiles\"));
if(UploadFile.PostedFile!=null && UploadFile.PostedFile.FileName.Length>0)
{string destDir=Server.MapPath(@".\ExcelFiles\");
try
{string fileName=Path.GetFileName(UploadFile.PostedFile.FileName);
UploadFile.PostedFile.SaveAs(Path.Combine(destDir,fileName));
Response.Redirect("RemoteFileManager.aspx"); }}}
2.2.2导入程序设计:
(1) Web界面:如下(图3)
图3
(2)程序代码如下:
private void Excel_to_Oracle_Click(object sender, System.EventArgs e)
{#region将EXCEL表数据读入DataSet
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ddlFiles.SelectedValue+";Extended Properties=Excel 8.0;";
OleDbConnection oleconn = new OleDbConnection(strConn);
string cmd="SELECT ";
cmd+=" "+ddla.SelectedItem.Text.ToString().Trim().ToUpper()+" , ";
cmd+=" "+ddlb.SelectedItem.Text.ToString().Trim().ToUpper()+" , ";
cmd+=" "+ddlc.SelectedItem.Text.ToString().Trim().ToUpper();
cmd+=" FROM ["+TextBox1.Text+"$]";
OleDbDataAdapter myCommandPart = new OleDbDataAdapter(cmd,strConn);
DataSet myDataSet1 = new DataSet();
myCommandPart.Fill(myDataSet1);
#endregion
#region 将DataSet中数据导入数据库StringBuilder
objConn.Open();
yutrans = objConn.BeginTransaction();
try
{OracleCommand insCommand=new OracleCommand();
insCommand.Connection=objConn;
insCommand.Transaction=yutrans;
for(int i=0;i {insertRowCount++;
StringBuilder sbExcel = new StringBuilder("");
sbExcel.Append("INSERT INTO hlatemp(cust_code,hl_type,input_time,a,b,c)");
sbExcel.Append("VALUES ('");
sbExcel.Append(Session["session_cust_code"].ToString().Trim ().ToUpper ());
sbExcel.Append("','");
sbExcel.Append(ddl_hl_type.SelectedItem.Text.ToString().Trim ().ToUpper ());
sbExcel.Append("',");
sbExcel.Append("TO_DATE('");
sbExcel.Append(tbNowDate.Text);
sbExcel.Append("','YYYY-MM-DD HH24:MI:SS')");
sbExcel.Append(",'");
insCommand.CommandText=sbExcel.ToString();
insCommand.ExecuteNonQuery();}
yutrans.Commit();
if (objConn.State.ToString().Equals ("Open")) objConn.Close();}
#endregion
#endregion}
2.2.3 导出程序设计:
(1)Web界面设计:如下(图4)
图4
(2) 导出全部页Excel程序代码如下:
private void btn_all_datagrid_to_Excel_Click(object sender, System.EventArgs e)
{OracleDataAdapter adexcel = new OracleDataAdapter();
OracleCommand oracleSelectCommand2 = new OracleCommand();
adexcel.SelectCommand =oracleSelectCommand2;
oracleSelectCommand2.CommandText="SELECT * FROM HLATEMP where
CUST_CODE='"+Session["session_cust_code"]+"' order by sn ";
oracleSelectCommand2.Connection =objConn;
DataSet dsexcel=new DataSet ();
dsexcel.Clear ();
adexcel.Fill(dsexcel);
Datagrid2.DataSource =dsexcel;
Datagrid2.DataBind();
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
this.EnableViewState = false;
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
Datagrid2.RenderControl(hw);
Response.Write(sw.ToString());
Response.End(); }
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:c#;BS模式;Excel;导入导出;应用
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)06-11492-02
随着计算机网络技术的发展,INTERNET技术正带领信息科技进入新的信息时代,以Web为中心进行构建,采用B/S结构开发信息系统已经成为潮流。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装racle、Sybase、Informix或 SQL Server等数据库。浏览器就可以通过Web Server 同数据库进行数据交互。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。但它的缺点是打印和Excel表的数据交换不如C/S(Client/Server)模式方便,在水晶报表Crystal Reports下,C/S模式直接具有导出Excel表的功能,可在B/S的Web模式下就显得很困难。本文在此通过案例介绍一种基于Web使用C#.NET编程完成Oracle数据库与Excel表数据交换的解决方案。
1 开发工具介绍及设计思想
1.1微软.Net技术
Microsoft .NET 是微软公司的一组软件技术,用来连接信息、人、系统和各种设备。它通过使用 Web Services 技术来获得软件的高度集成。除了将小型的、分散的、构建模块应用互相连接起来,还将 Internet 上的更大应用连接起来。目前随着互联网上各种标准协议以及 .NET框架的日益成熟,开发互联网应用的首推工具为微软.NET框架。C#是微软基于.net框架由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,C#意在综合Visual Basic的高效率和C++的强大功能。C#将是完全依靠Windows的最完美的产物。C#(发音为“C-Sharp”)既保持了C++中熟悉的语法,并且还包含了大量的高效代码和面向对象特性。它不仅能用于WEB服务程序的开发,并且还能开发强大的系统级程序。因此我们选择C#.net作为开发工具。
1.2Oracle数据库技术
Oracle数据库是目前世界上应用较广的大型关系数据库产品之一,Oracle 8i将Java虚拟机完全集成于自身数据库之中,通过对Java开发环境的全面支持,成为第一款具有容错功能的可伸缩Java部署平台,能给互联网的应用软件提供一个更加完善的平台。对于浏览器方式的应用,用户端只需用标准的浏览器,就可以访问数据,进行交易处理,而不需专门的用户端程序,尤其适用于大量移动分布式用户群。Oracle还提供了一个工具Oracle WebDB,可以用来建立、部署和监控网络数据库应用和网站,它有一组基于浏览器HTML工具,提供快速简便的方式访问Oracle数据库,能够用标准的Web浏览器显示,可以在任何与网络相连的地方通过浏览器开发、部署、管理和配置网上应用。
1.3设计思想
该案例的目的是:将存放在本地(客户浏览器端)的Excel文件(扩展名为.xls)中的单元格数据记录导入到远程非本地(主机服务器端)Oracle数据库服务器中形成数据记录;然后在网页中使用DataGrid显示出来;最后再将DataGrid显示的数据记录导出到本地,形成Excel格式的.xls文件。
在设计过程中,我们采用的过程和方式是:(1)在oracle数据库中建立与Excel文件相应的对照字段;(2)使用c#编程命令将Excel文件采用上传的方式上传到服务器上指定的目录;(3)将此上传的Excel格式文件导入到Oracle数据库;(4)能使用DataGrid显示浏览出来;(5)使用c#编程命令书写程序将DataGrid中显示的Oracle数据库中的记录导出为Excel格式文件存放在本地,考虑到DataGrid中数据显示有分页的可能,我们导出时使用数据集Dataset方式导出,分导出本页和全部页两种。
2 开发实例及程序源码
2.1上传Excel前的准备工作:
(1)在oracle数据库中建立如下基因临时表(图1)的数据库表及字段。
图1 基因临时表
(2)整理一下如下的Excel表,建立与之数据库相对应的字段。
2.2界面和程序设计:
2.2.1上传设计:
(1) Web界面:如下(图2)
图2
(2)上传程序代码:
private void btUpload_Click(object sender, System.EventArgs e){
System.IO.DirectoryInfo dirfiles;
System.IO.FileInfo[] files;
dirfiles= new DirectoryInfo(Server.MapPath(@".\ExcelFiles\"));
if(UploadFile.PostedFile!=null && UploadFile.PostedFile.FileName.Length>0)
{string destDir=Server.MapPath(@".\ExcelFiles\");
try
{string fileName=Path.GetFileName(UploadFile.PostedFile.FileName);
UploadFile.PostedFile.SaveAs(Path.Combine(destDir,fileName));
Response.Redirect("RemoteFileManager.aspx"); }}}
2.2.2导入程序设计:
(1) Web界面:如下(图3)
图3
(2)程序代码如下:
private void Excel_to_Oracle_Click(object sender, System.EventArgs e)
{#region将EXCEL表数据读入DataSet
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ddlFiles.SelectedValue+";Extended Properties=Excel 8.0;";
OleDbConnection oleconn = new OleDbConnection(strConn);
string cmd="SELECT ";
cmd+=" "+ddla.SelectedItem.Text.ToString().Trim().ToUpper()+" , ";
cmd+=" "+ddlb.SelectedItem.Text.ToString().Trim().ToUpper()+" , ";
cmd+=" "+ddlc.SelectedItem.Text.ToString().Trim().ToUpper();
cmd+=" FROM ["+TextBox1.Text+"$]";
OleDbDataAdapter myCommandPart = new OleDbDataAdapter(cmd,strConn);
DataSet myDataSet1 = new DataSet();
myCommandPart.Fill(myDataSet1);
#endregion
#region 将DataSet中数据导入数据库StringBuilder
objConn.Open();
yutrans = objConn.BeginTransaction();
try
{OracleCommand insCommand=new OracleCommand();
insCommand.Connection=objConn;
insCommand.Transaction=yutrans;
for(int i=0;i
StringBuilder sbExcel = new StringBuilder("");
sbExcel.Append("INSERT INTO hlatemp(cust_code,hl_type,input_time,a,b,c)");
sbExcel.Append("VALUES ('");
sbExcel.Append(Session["session_cust_code"].ToString().Trim ().ToUpper ());
sbExcel.Append("','");
sbExcel.Append(ddl_hl_type.SelectedItem.Text.ToString().Trim ().ToUpper ());
sbExcel.Append("',");
sbExcel.Append("TO_DATE('");
sbExcel.Append(tbNowDate.Text);
sbExcel.Append("','YYYY-MM-DD HH24:MI:SS')");
sbExcel.Append(",'");
insCommand.CommandText=sbExcel.ToString();
insCommand.ExecuteNonQuery();}
yutrans.Commit();
if (objConn.State.ToString().Equals ("Open")) objConn.Close();}
#endregion
#endregion}
2.2.3 导出程序设计:
(1)Web界面设计:如下(图4)
图4
(2) 导出全部页Excel程序代码如下:
private void btn_all_datagrid_to_Excel_Click(object sender, System.EventArgs e)
{OracleDataAdapter adexcel = new OracleDataAdapter();
OracleCommand oracleSelectCommand2 = new OracleCommand();
adexcel.SelectCommand =oracleSelectCommand2;
oracleSelectCommand2.CommandText="SELECT * FROM HLATEMP where
CUST_CODE='"+Session["session_cust_code"]+"' order by sn ";
oracleSelectCommand2.Connection =objConn;
DataSet dsexcel=new DataSet ();
dsexcel.Clear ();
adexcel.Fill(dsexcel);
Datagrid2.DataSource =dsexcel;
Datagrid2.DataBind();
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
this.EnableViewState = false;
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
Datagrid2.RenderControl(hw);
Response.Write(sw.ToString());
Response.End(); }
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。