导入/导出Excel
1.--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insertinto表select*from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
--如果导入数据并生成表
select*into表from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
/*===================================================================*/
2.--从SQL数据库中,导出数据到Excel:
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insertintoOPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
select*from表
--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXECmaster..xp_cmdshell'bcp数据库名.dbo.表名out"c:est.xls"/c-/S"服务器名"/U"用户名"-P"密码"'
--导出查询的情况
EXECmaster..xp_cmdshell'bcp"SELECTau_fname,au_lnameFROMpubs..authorsORDERBYau_lname"queryout"c:est.xls"/c-/S"服务器名"/U"用户名"-P"密码"'
/*--说明:
c: est.xls为导入/导出的Excel文件名.
sheet1$为Excel文件的工作表名,一般要加上$才能正常使用.
--*/
3.--建立存储过程,导出真正的Excel文件(用此方法导出的Excel文件在用于导入时不会报错)
--下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中)
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_exporttb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_exporttb]
GO
/**//*--数据导出EXCEL
导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--邹建2003.10(引用请保留此信息)--*/
/**//*--调用示例
p_exporttb@tbname='地区资料',@path='c:',@fname='aa.xls'
--*/
createprocp_exporttb
@tbnamesysname,--要导出的表名
@pathnvarchar(1000),--文件存放目录
@fnamenvarchar(250)=''--文件名,默认为表名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)
--参数检测
ifisnull(@fname,'')=''set@fname=@tbname+'.xls'
--检查文件是否已经存在
ifright(@path,1)<>''set@path=@path+''
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql
--数据库创建语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
set@constr='DRIVER={MicrosoftExcelDriver(*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set@constr='Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.0;HDR=YES'
+';DATABASE='+@sql+'"'
--连接数据库
exec@err=sp_oacreate'adodb.connection',@objout
if@err<>0gotolberr
exec@err=sp_oamethod@obj,'open',null,@constr
if@err<>0gotolberr
/**//*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select@sql='droptable['+@tbname+']'
exec@err=sp_oamethod@obj,'execute',@outout,@sql
--*/
--创建表的SQL
select@sql='',@fdlist=''
select@fdlist=@fdlist+',['+a.name+']'
,@sql=@sql+',['+a.name+']'
+case
whenb.namelike'%char'
thencasewhena.length>255then'memo'
else'text('+cast(a.lengthasvarchar)+')'end
whenb.namelike'%int'orb.name='bit'then'int'
whenb.namelike'%datetime'then'datetime'
whenb.namelike'%money'then'money'
whenb.namelike'%text'then'memo'
elseb.nameend
FROMsyscolumnsaleftjoinsystypesbona.xtype=b.xusertype
whereb.namenotin('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
andobject_id(@tbname)=id
select@sql='createtable['+@tbname
+']('+substring(@sql,2,8000)+')'
,@fdlist=substring(@fdlist,2,8000)
exec@err=sp_oamethod@obj,'execute',@outout,@sql
if@err<>0gotolberr
exec@err=sp_oadestroy@obj
--导入数据
set@sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel8.0;HDR=YES;IMEX=1
;DATABASE='+@path+@fname+''',['+@tbname+'$])'
exec('insertinto'+@sql+'('+@fdlist+')select'+@fdlist+'from'+@tbname)
return
lberr:
execsp_oageterrorinfo0,@srcout,@descout
lbexit:
selectcast(@errasvarbinary(4))as错误号
,@srcas错误源,@descas错误描述
select@sql,@constr,@fdlist
go
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_exporttb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_exporttb]
GO
/**//*--数据导出EXCEL
导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
如果文件不存在,将自动创建文件
如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--邹建2003.10(引用请保留此信息)--*/
/**//*--调用示例
p_exporttb@sqlstr='select*from地区资料'
,@path='c:',@fname='aa.xls',@sheetname='地区资料'
--*/
createprocp_exporttb
@sqlstrvarchar(8000),--查询语句,如果查询语句中使用了orderby,请加上top100percent
@pathnvarchar(1000),--文件存放目录
@fnamenvarchar(250),--文件名
@sheetnamevarchar(250)=''--要创建的工作表名,默认为文件名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)
--参数检测
ifisnull(@fname,'')=''set@fname='temp.xls'
ifisnull(@sheetname,'')=''set@sheetname=replace(@fname,'.','#')
--检查文件是否已经存在
ifright(@path,1)<>''set@path=@path+''
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql
--数据库创建语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
set@constr='DRIVER={MicrosoftExcelDriver(*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set@constr='Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.0;HDR=YES'
+';DATABASE='+@sql+'"'
--连接数据库
exec@err=sp_oacreate'adodb.connection',@objout
if@err<>0gotolberr
exec@err=sp_oamethod@obj,'open',null,@constr
if@err<>0gotolberr
--创建表的SQL
declare@tbnamesysname
set@tbname='##tmp_'+convert(varchar(38),newid())
set@sql='select*into['+@tbname+']from('+@sqlstr+')a'
exec(@sql)
select@sql='',@fdlist=''
select@fdlist=@fdlist+',['+a.name+']'
,@sql=@sql+',['+a.name+']'
+case
whenb.namelike'%char'
thencasewhena.length>255then'memo'
else'text('+cast(a.lengthasvarchar)+')'end
whenb.namelike'%int'orb.name='bit'then'int'
whenb.namelike'%datetime'then'datetime'
whenb.namelike'%money'then'money'
whenb.namelike'%text'then'memo'
elseb.nameend
FROMtempdb..syscolumnsaleftjointempdb..systypesbona.xtype=b.xusertype
whereb.namenotin('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
anda.id=(selectidfromtempdb..sysobjectswherename=@tbname)
if@@rowcount=0return
select@sql='createtable['+@sheetname
+']('+substring(@sql,2,8000)+')'
,@fdlist=substring(@fdlist,2,8000)
exec@err=sp_oamethod@obj,'execute',@outout,@sql
if@err<>0gotolberr
exec@err=sp_oadestroy@obj
--导入数据
set@sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel8.0;HDR=YES
;DATABASE='+@path+@fname+''',['+@sheetname+'$])'
exec('insertinto'+@sql+'('+@fdlist+')select'+@fdlist+'from['+@tbname+']')
set@sql='droptable['+@tbname+']'
exec(@sql)
return
lberr:
execsp_oageterrorinfo0,@srcout,@descout
lbexit:
selectcast(@errasvarbinary(4))as错误号
,@srcas错误源,@descas错误描述
select@sql,@constr,@fdlist
go
4.--在.net中导出到Excel的简单实例.
(1).添加引用MicrosoftExcel11.0ObjectLibrary(在COM中)
(2).在web.config的上<system.web>里加
<identityimpersonate="true"/>
//此句为了使用户能在本地打开文档,identify属性规定了身份验证的模式,一般情况下为false,这样安全性较高
(3).在Text.aspx上加Button1控件
(4).在cs页面添加usingMicrosoft.Office.Interop.Excel;
(5).添加单击事件,在这里处理将数据库中的数据导入excel,代码如下:
//定义方法GetData(),返回一个数据表
privateSystem.Data.DataTableGetData()
...{
SqlConnectionconn=newSqlConnection(@"Server=XJIE;InitialCatalog=Northwind;Uid=sa;Pwd=xjie;");
SqlDataAdapteradapter=newSqlDataAdapter("selectCompanyName用户名,ContactTitle联系主题,Address住宅地址,ContactName联系人,Phone电话,City城市fromCustomersorderbyCustomerIDdesc",conn);
DataSetds=newDataSet();
try
...{
adapter.Fill(ds,"Customer");
}
catch(Exceptionex)
...{
MessageBox.Show(ex.ToString());
}
returnds.Tables[0];
}
privatevoidButton1_Click(objectsender,System.EventArgse)
...{
Applicationexcel=newApplication();
introwIndex=1;
intcolIndex=0;
excel.Application.Workbooks.Add(true);
DataTabletable=GetData();
//将所得到的表的列名,赋值给单元格
foreach(DataColumncolintable.Columns)
...{
colIndex++;
excel.Cells[1,colIndex]=col.ColumnName;
}
//同样方法处理数据
foreach(DataRowrowintable.Rows)
...{
rowIndex++;
colIndex=0;
foreach(DataColumncolintable.Columns)
...{
colIndex++;
excel.Cells[rowIndex,colIndex]=row[col.ColumnName].ToString();
}
}
//不可见,即后台处理
excel.Visible=true;
}
相关推荐
具体而言,操作者可以通过指定表复制或查询界面,选择复制一个或多个表或视图的数据,或者编写SQL语句查询数据后导出到Excel。通过这些步骤,可以完成SQL Server中数据批量导出到Excel数据表的操作。 总结来说,...
【Kettle简介】 Kettle,又称为Pentaho ...对于初学者来说,这个示例是一个很好的起点,可以帮助理解Kettle的基本操作和工作原理。随着经验的积累,你可以逐步掌握更高级的功能,如错误处理、性能优化、数据流控制等。
- **Service代码**:实现导出Excel的具体逻辑,包括解决文件名中文乱码问题。 - **DAO代码**:可能涉及查询数据库获取需要导出的数据。 5. **JSP页面** - **index.jsp**:主页,提供导出链接或按钮。 - **list....
但是,对于简单的数据导入导出,OLEDB接口是一个简单快速的解决方案。 总之,C#操作Excel涉及了数据库连接、数据适配器和命令对象的使用,以及基本的SQL查询语法。正确理解和运用这些概念,可以有效地在C#应用程序...
9. 用户界面(可选):如果这是一个用户交互的应用,可能还需要一个简单的图形用户界面(GUI),让用户输入数据库连接信息、选择要导出的表和字段,以及设置导出选项。JavaFX或Swing是创建Java GUI的常见工具。 综...
下面是一个简单的步骤来实现这个功能: 1. **连接数据库**:首先,你需要使用JDBC建立与MySQL数据库的连接。这通常涉及到设置URL、用户名、密码,然后加载JDBC驱动并调用`DriverManager.getConnection()`方法。 ``...
- 防止SQL注入:在从用户输入构建查询时,务必使用参数化查询或存储过程,避免直接拼接SQL语句。 - 内容过滤:确保导出的数据没有潜在的安全敏感信息,例如用户密码、个人识别信息等。 - 大小限制:为了避免性能...
"administrator-1.1.3-win.msi" 文件是一个针对Windows操作系统的MySQL数据导出工具,它提供了方便快捷的方式来处理数据库中的数据导出问题,特别是解决了SQL脚本可能出现的乱码问题。 MySQL数据库导出工具有以下几...
在数据库管理中,数据的导入导出是一个重要的操作,它允许我们将数据从一个数据库系统转移到另一个系统,或者在不同的格式之间进行转换。例如,文件中提到的从SQL Server导出数据并导入到另一个SQL Server实例("SQL...
2. SQL语句操作:在实现功能时,SQL语句的编写至关重要。例如,购票操作涉及INSERT语句插入新订单;退票可能需要UPDATE语句更新订单状态;查询余票需要用到SELECT语句,结合JOIN操作从多个表中获取信息。同时,学会...
2. 查询执行:提供一个简洁的查询编辑器,可以编写并执行SQL语句,进行数据查询、更新、插入和删除等操作。同时,它还支持结果集的查看和导出。 3. 对象管理:允许用户浏览和管理数据库中的表、视图、存储过程、...
1. "最简单的MDB数据库转换保存为excel表格地方法.e" - 这很可能是易语言编写的主程序文件,执行MDB到Excel的转换。.e文件是易语言的可执行文件扩展名,用户可以直接运行这个文件来体验程序的功能。 2. "源码使用...
总的来说,DB查询分析器3.02是一个强大且灵活的SQL设计工具,它能够帮助用户高效地编写、调试和管理SQL语句,适应多种数据库系统,同时解决了特殊字符处理等问题,极大地提升了SQL编程的效率和便利性。无论是初学者...
这个方法适用于简单的情况,如读取单个工作表且不涉及复杂的公式、图表或VBA宏。对于更复杂的需求,可能需要使用其他库,如EPPlus或NPOI,它们提供了更全面的功能和更好的性能。需要注意的是,使用OLEDB方式读取...
在介绍Excel VBA操作MySQL的系列文章中,作者首先...在文章的最后,作者也鼓励读者通过电子邮件与他交流心得,提出了问题或提供了更好的解决方案。这种开放性的交流有助于促进知识共享,以及技术经验的相互学习和提高。
1. **问题解决**:在安装SQL Server时,如果出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作”的提示,通常可以通过清理Windows的“安装/卸载程序”列表或使用专门的清理工具如Revo Uninstaller来解决...