Database 指定导入时的目标列(要访问的CSV)

Database 指定导入时的目标列(要访问的CSV),database,ms-access,csv,asp-classic,Database,Ms Access,Csv,Asp Classic,我已经了解了如何通过将CSV导入Access数据库。但在中,没有关于如何在导入时以特定列为目标的信息。如何确保CSV中的正确列被放入数据库中的正确列中 我需要能够在使用经典ASP导入列值时编辑/添加列值。示例: CSV中的第4列是一个用户ID,我需要能够在它进入数据库的电子邮件列时在末尾添加“@domain.com” 第6列是一个分类:如果它的值是“Teacher”,那么在导入时,我需要将其更改为“教室” 我正在使用一些我没有创建的旧代码&DB。相信我,如果可能的话,我会使用其他的东西,所以

我已经了解了如何通过将CSV导入Access数据库。但在中,没有关于如何在导入时以特定列为目标的信息。如何确保CSV中的正确列被放入数据库中的正确列中

我需要能够在使用经典ASP导入列值时编辑/添加列值。示例:

  • CSV中的第4列是一个用户ID,我需要能够在它进入数据库的电子邮件列时在末尾添加“@domain.com”
  • 第6列是一个分类:如果它的值是“Teacher”,那么在导入时,我需要将其更改为“教室”
我正在使用一些我没有创建的旧代码&DB。相信我,如果可能的话,我会使用其他的东西,所以请不要使用MS Access

我想整件事归结起来就是:

  • 如果真的允许我将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!用户名
,我收到一个
语法错误
。所以我回到了设置CSV列值的变量


再次感谢您的帮助。

与前面链接的问题一样,假设您打开了一个包含CSV内容的ADO记录集。可以为Access目标表打开第二个ADO记录集

如果CSV文件包含列名,则可以循环遍历其记录集行,并将其值插入目标记录集。如果CSV记录集是rsCSV,目标表的记录集是rsDB

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV!userid & "@domain.com"
    If rsCSV!classification = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV!classification
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop
如果CSV不包括列名,您仍然可以这样做,但需要使用字段集合中字段的序号位置。这些位置号是从零开始的,所以第4列是3,以此类推

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV.Fields(3) & "@domain.com"
    If rsCSV.Fields(5) = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV.Fields(5)
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop

与前面链接的问题一样,假设您打开了一个包含CSV内容的ADO记录集。可以为Access目标表打开第二个ADO记录集

如果CSV文件包含列名,则可以循环遍历其记录集行,并将其值插入目标记录集。如果CSV记录集是rsCSV,目标表的记录集是rsDB

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV!userid & "@domain.com"
    If rsCSV!classification = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV!classification
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop
如果CSV不包括列名,您仍然可以这样做,但需要使用字段集合中字段的序号位置。这些位置号是从零开始的,所以第4列是3,以此类推

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV.Fields(3) & "@domain.com"
    If rsCSV.Fields(5) = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV.Fields(5)
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop

非常感谢你。一个非常清楚和简洁的回答。另外,感谢您包含“无列名”代码,因为我使用的csv没有这些代码。我会让你知道结果的。非常感谢。一个非常清楚和简洁的回答。另外,感谢您包含“无列名”代码,因为我使用的csv没有这些代码。我会让你知道它是如何工作的。这很容易受到sql注入的攻击hacks@JoelCoehoorn,谢谢你的关心;但是,这是在内部网上的,受密码保护。在这个网站上,SQL注入的可能性微乎其微。这很容易受到SQL注入的攻击hacks@JoelCoehoorn,谢谢你的关心;但是,这是在内部网上的,受密码保护。在这个网站上,SQL注入的可能性微乎其微。