当前位置: 代码迷 >> ASP.NET >> 求个Excel导入sql的解决方案解决办法
  详细解决方案

求个Excel导入sql的解决方案解决办法

热度:5580   发布时间:2013-02-26 00:00:00.0
求个Excel导入sql的解决方案
两个问题:
1.
有大量的Excel数据需要导入sql
起初我用的是for循环从Excel中每读一条就导入一条
后来发现数据一多的话就比较慢
有没有什么更好的更快的方法吗?
2.
关于Excel中数据类型检查的问题
比如我要导入的是数字,可惜有时候它在Excel中却不是真正的数字,在Excel中那个 "数字 "角上有个小箭头,要选上它然后再选转换为数字才行,不然导入程序在执行过程中会出错,每次我在进行导数据之前我都要挨着检查Excel表格中是否有这类 "数字 "存在,非常麻烦......有好的解决方法吗??

------解决方案--------------------------------------------------------
不用程序就好了哈
帮顶
------解决方案--------------------------------------------------------
Excel中数据类型检查的问题可以批量转换
------解决方案--------------------------------------------------------
******* 导出到excel********
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S "GNETDATA/GNETDATA " -U "sa " -P " " '

/*********** 导入Excel
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions

/*****动态文件名*****
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls '
set @s = ' ' 'Microsoft.Jet.OLEDB.4.0 ' ',
' 'Data Source= " '+@fn+ ' ";User ID=Admin;Password=;Extended properties=Excel 5.0 ' ' '
set @s = 'SELECT * FROM OpenDataSource ( '+@s+ ')...sheet1$ '
exec(@s)
*/

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+ '  ' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions

/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
'SQLOLEDB ',
'Data Source=远程ip;User ID=sa;Password=密码 '
).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions


/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword '

/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword '

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename " queryout c:\DT.txt -c -Sservername -Usa -Ppassword '

导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名 " out "d:\tt.txt " -c -t ,-U sa -P password '


BULK INSERT 库名..表名
FROM 'c:\test.txt '
WITH (
FIELDTERMINATOR = '; ',
ROWTERMINATOR = '\n '
)


--/* dBase IV文件
select * from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\ ', 'select * from [客户资料4.dbf] ')
--*/

--/* dBase III文件
select * from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'dBase III;HDR=NO;IMEX=2;DATABASE=C:\ ', 'select * from [客户资料3.dbf] ')
--*/

--/* FoxPro 数据库
select * from openrowset( 'MSDASQL ',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\ ',
'select * from [aa.DBF] ')
--*/

/**************导入DBF文件****************/
select * from openrowset( 'MSDASQL ',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF ',
'select * from customer where country != "USA " order by country ')
go
/***************** 导出到DBF ***************/
  相关解决方案