【发布时间】:2011-10-12 21:57:59
【问题描述】:
我发现了如何通过another question 将 CSV 导入我的 Access 数据库。但是在answer 中没有关于如何在导入时定位特定列的信息。如何确保将 CSV 中的正确列放入数据库中的正确列中?
我需要能够在使用经典 ASP 导入列值时对其进行编辑/添加。例子:
- CSV 中的第 4 列是用户 ID,当它进入数据库的电子邮件列时,我需要能够在末尾添加“@domain.com”。
- 第 6 列是一个分类:如果它的值为“教师”,那么在导入时,我需要将其更改为“课堂”。
我正在处理一些不是我创建的旧代码和数据库。相信我,如果可以的话,我会使用其他东西,所以请不要使用 MS Access。
我想这整件事可以归结为:
- 如果 previous question's answer 真的允许我将 CSV 视为 db 表,那么我如何选择真实 db 表中的列?
// 更新:
我已经按照我的想法设置了一切,但是我收到了一个错误:
ADODB.Recordset error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/datazone_bkup/Rollover/importTeachers.asp, line 12
第 12 行:CSV.open "SELECT * FROM teachers.csv", conn
我的完整代码如下:
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_
Server.MapPath("\path\to\file") & ";Extended Properties='text;HDR=no;FMT=Delimited';"
Set connCSV = Server.CreateObject("ADODB.Connection")
connCSV.Open strConn
Set CSV = Server.CreateObject("ADODB.recordset")
CSV.open "SELECT * FROM teachers.csv", conn
do until CSV.eof
UserName = CSV.Fields(4)
LastName = CSV.Fields(1)
FirstName = CSV.Fields(2)
MiddleName = CSV.Fields(3)
School = CSV.Fields(5)
if CSV.Fields(6) = "Teacher" then
SecLevel = "Classroom"
end if
Active = "Yes"
TeacherNumber = rsCSV.Fields(0)
rsCSV.movenext
sql = "INSERT INTO tblTeacher (UserName, LastName, FirstName, MiddleName, School, SecLevel, Active, TeacherNumber) " &_
"VALUES (" &_
"'" & UserName & "','" & LastName & "','" & FirstName & "','" & MiddleName & "'," &_
"'" & School & "','" & SecLevel & "','" & Active & "','" & TeacherNumber & "'" &_
")"
on error resume next
conn.execute(sql)
loop
@HansUp,当我尝试在rsDB!UserName 中使用! 时,我收到了Syntax Error。所以我回到为 CSV 列值设置变量。
再次感谢您的帮助。
【问题讨论】:
-
这很容易受到 sql 注入黑客攻击
-
@JoelCoehoorn,感谢您的关注;但是,这是在 Intranet 上,并且受密码保护。在这个网站上,SQL 注入的可能性几乎为零。
标签: database ms-access csv asp-classic