用C#讲SQL SERVER数据生成ACCESS,EXCEL的问题,高手请进!

yfx82 深圳 CTO/CIO/技术副总裁/总工程师  2005-06-20 10:59:36
小弟需要实现将SQL SERVER数据到入ACCESS,EXCEL的功能,功能基本上完成,但遇到一个棘手的问题。如果要导出的数据有dateTime或者money ,生成的SQL语句执行抱错,说是字段定义出错,我把dateTime或者money类型强行转成string类型还是一样的错。
程序的愿意是讲SQL SERVER的表提取为DATATABLE然后用OLEDB连接ACCESS,EXCEL,生成建表语句和插入数据语句。

这是原始的包含DateTime类型的SQL语句:
create table Register_Patient ( PatientID NUMBER, UserName STRING, NickName STRING, TrueName STRING, PassWord STRING, SocialInsuranceCode STRING, Sex NUMBER, Email STRING, Birthday DATETIME, CertificateType STRING, CertificateCode STRING, Mobile STRING, Tel STRING, Address STRING, Zip STRING, Province NUMBER, City NUMBER, Flag NUMBER, addTime DATETIME, State NUMBER, RegIp STRING, LastLoginTime DATETIME, LoginCount NUMBER )

这是我把DateTime类型强行转换成STRING的语句:
create table Register_Patient ( PatientID NUMBER, UserName STRING, NickName STRING, TrueName STRING, PassWord STRING, SocialInsuranceCode STRING, Sex NUMBER, Email STRING, Birthday STRING, CertificateType STRING, CertificateCode STRING, Mobile STRING, Tel STRING, Address STRING, Zip STRING, Province NUMBER, City NUMBER, Flag NUMBER, addTime STRING, State NUMBER, RegIp STRING, LastLoginTime STRING, LoginCount NUMBER )

这是不包含DateTime或者Money类型的可以成功执行的SQL语句:
create table Register_Bureau ( BureauID NUMBER, BureauName STRING, BureauLevel NUMBER, Introduce STRING, Province NUMBER, City NUMBER, Area NUMBER, Address STRING, LinkMan STRING, Tel STRING, State NUMBER )"

请问一下是什么原因造成这种错误,怎样改进了,请赐教,多谢了
...全文
113 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cbw1230 2005-06-21
回复:lampson123(微软)
我试过了,可以成功的SQL表导出到Excel文件里。遗憾的是没有把表的字段名称也导出到Excel文件中去。
回复
ghchen 2005-06-21
在Access数据库中用Date来代替DateTime ,Currency来代替money试试
回复
yfx82 2005-06-21
自己顶一下
回复
cxb_hy 2005-06-21
方法是有的,直接调用SQL的数据转换服务(COM),这不就完事儿了吗?详细调用方法请楼主自己看SQL Server的帮助.
回复
yfx82 2005-06-21
还有别的好方法吗?
回复
lampson123 2005-06-20
1. 将SQL SERVER表里的数据插入到Access表中

-- ======================================================

在SQL SERVER 里运行:

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source=" c:\DB.mdb";User ID=Admin;Password='',ACCESS表名 )

(列名1,列名2)

select 列名1,列名2 from sql表



实例:

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:\db.mdb';'admin';'', Test)

select id,name from Test

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)

SELECT *

FROM sqltablename


2、将SQL SERVER中查询到的数据导成一个Excel文件

-- ======================================================

T-SQL代码:

EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'

参数:S 是SQL服务器名;U是用户;P是密码

说明:还可以导出文本文件等多种格式



实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'



EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'



在VB6中应用ADO导出EXCEL文件代码:

Dim cn As New ADODB.Connection

cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"

cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"



3、在SQL SERVER里往Excel插入数据:

-- ======================================================

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)



T-SQL代码:

INSERT INTO

OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',

'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]

(bestand, produkt) VALUES (20, 'Test')

回复
yfx82 2005-06-20
这个方法有朋友跟我提到,但是我想弄清楚为什么,我那样做不行?
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2005-06-20 10:59
社区公告

让您成为最强悍的C#开发者