从另一个db表将数据插入到db表中 - (经典ASP)

时间:2017-01-25 18:06:38

标签: sql-server excel asp-classic

项目详情:使用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”列。

我的编程知识并不好。我主要是设计师。 任何帮助将不胜感激

2 个答案:

答案 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

相关问题