项目详情:使用SQL 2012的经典ASP。
我的Excel文件只有两列(“F1”和“F2”),包含大约3000条记录。
我还有一个名为“BACKUPP”的SQL2012表,其中包含3列(“ID”“KODIKOS”“APOTHEMA”)。
我想将Excel中的所有数据插入“BACKUPP”表。 我已成功连接到Excel和& sql db,具有以下方式:
对于EXCEL:
Dim RS_EXCEL
Dim RS_EXCEL_cmd
Dim RS_EXCEL_numRows
Set RS_EXCEL_cmd = Server.CreateObject ("ADODB.Command")
RS_EXCEL_cmd.ActiveConnection = MM_connnectt_STRING
RS_EXCEL_cmd.CommandText = "SELECT * FROM ['Website stock$']" RS_EXCEL_cmd.Prepared = true
Set RS_EXCEL = RS_EXCEL_cmd.Execute
RS_EXCEL_numRows = 0
使用以下连接字符串:
MM_connnectt_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\OLA\SITES\SuperCleanerWINHOST\BACK\file.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
FOR SQL DB:
Dim RS_SQL
Dim RS_SQL_cmd
Dim RS_SQL_numRows
Set RS_SQL_cmd = Server.CreateObject ("ADODB.Command")
RS_SQL_cmd.ActiveConnection = MM_syndesi_STRING
RS_SQL_cmd.CommandText = "SELECT * FROM dbo.BACKUPP"
RS_SQL_cmd.Prepared = true
Set RS_SQL = RS_SQL_cmd.Execute
RS_SQL_numRows = 0
使用以下连接字符串:
MM_syndesi_STRING = "dsn=DSN_supercle_dsn;uid=DB_107185_cleanerdb_user;pwd=XXXXX;"
我的两个连接在本地都很完美。我也在线测试它们,也没有任何问题。
因此,我可以轻松地从Excel和Excel中检索数据而不会出现任何问题。 SQL db。 我的问题是我不知道将Excel数据库中的所有数据插入sql db的方法。
我希望将Excel数据库的“F1”列插入“KODIKOS”列 和 Excel数据库的“F2”列将插入“APOTHEMA”列。
我的编程知识并不好。我主要是设计师。 任何帮助将不胜感激
答案 0 :(得分:0)
对于这样的任务,您可以更好地利用SQL Server的强大功能进行数据导入,这就是OPENROWSET
的设计目标。
> dput(lagres)
structure(list(ST = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 3L, 1L, 2L,
3L, 2L, 3L, 1L, 3L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("GeraghtyM",
"Other", "WeenJ"), class = "factor"), quarter = structure(c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L,
6L, 7L, 7L, 7L, 1L, 2L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L,
6L, 7L, 7L, 7L), .Label = c("2015-Q2", "2015-Q3", "2015-Q4",
"2016-Q1", "2016-Q2", "2016-Q3", "2016-Q4"), class = "factor"),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("ScanLag",
"TPADoorToLag"), class = "factor"), value = c(45.3333333333333,
60.2857142857143, 37.6, 0, 51.375, 95.4166666666667, 26.8,
42.75, 200, 28, 134, 68.2941176470588, 29, 42.8, 140.7, 0,
49.2222222222222, 103.833333333333, 0, 20.125, 0, 67.75,
48, 87, 93, 78, 49.5, 55, 65.6, 83, 59, 54, 153, 114, 111,
83, 8.66666666666667)), .Names = c("ST", "quarter", "variable",
"value"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 24L, 25L,
26L, 27L, 29L, 30L, 31L, 33L, 35L, 36L, 37L, 38L, 39L, 40L, 41L,
42L), class = "data.frame", na.action = structure(c(22L, 23L,
28L, 32L, 34L), .Names = c("22", "23", "28", "32", "34"), class = "omit"))
关于这种方法的一个很棒的事情是你仍然可以从Classic ASP中调用它,只需将它包装在一个存储过程中并通过INSERT INTO dbo.BACKUPP
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\OLA\SITES\SuperCleanerWINHOST\BACK\file.xls','SELECT * FROM [Website stock$]')
对象调用,例如;
ADODB.Command
答案 1 :(得分:-1)
丢弃Dreamweaver生成的代码。如果您要插入数据,那么最好使用插入查询而不是打开另一个记录集。以下是我将如何做到这一点:
response.write insertsql
基本上发生的事情是我们正在循环遍历将excel文档中的每一行插入SQL数据库的记录集。
我已经添加了注释掉的{{1}}语句,因为当您将记录集变量插入到SQL字符串中时,它很容易出错,而且它很好想要在尝试执行脚本之前读取脚本输出的实际SQL。要执行此操作,请取消注释response.write语句并注释conn2.execute语句。
我假设这是一个"在幕后"页。如果它是公开的,那么你需要看看如何防止SQL注入attaccks