用C#讲SQL SERVER数据生成ACCESS,EXCEL的问题,高手请进!
小弟需要实现将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 )"
请问一下是什么原因造成这种错误,怎样改进了,请赐教,多谢了
问题点数:40、回复次数:7Top
1 楼lampson123(微软)回复于 2005-06-20 11:46:21 得分 30
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')
Top
2 楼yfx82(仁面寿星)回复于 2005-06-20 15:54:20 得分 0
这个方法有朋友跟我提到,但是我想弄清楚为什么,我那样做不行?Top
3 楼yfx82(仁面寿星)回复于 2005-06-21 08:49:10 得分 0
自己顶一下Top
4 楼ghchen()回复于 2005-06-21 09:31:42 得分 0
在Access数据库中用Date来代替DateTime ,Currency来代替money试试Top
5 楼cbw1230(柏雯)回复于 2005-06-21 10:12:48 得分 0
回复:lampson123(微软)
我试过了,可以成功的SQL表导出到Excel文件里。遗憾的是没有把表的字段名称也导出到Excel文件中去。Top
6 楼yfx82(仁面寿星)回复于 2005-06-21 15:13:02 得分 0
还有别的好方法吗?Top
7 楼cxb_hy(一时的冲动)回复于 2005-06-21 15:25:23 得分 10
方法是有的,直接调用SQL的数据转换服务(COM),这不就完事儿了吗?详细调用方法请楼主自己看SQL Server的帮助.Top




