Asp classic 如何在VBScript中逐行读取CSV文件

Asp classic 如何在VBScript中逐行读取CSV文件,asp-classic,vbscript,csv,Asp Classic,Vbscript,Csv,我使用的是一个ASP页面,我必须读取一个CSV文件并将其插入DB表“Employee”中。我正在创建TestReader的一个对象。如何编写循环以执行最多为正在读取的CSV文件的行数/记录数?不要尝试自己解析该文件,你只会让自己头疼。这比在换行符和逗号上拆分要多得多 您可以使用OLEDB在记录集中打开文件并像在db表中一样读取它。大概是这样的: Dim strConn, conn, rs strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Sour

我使用的是一个ASP页面,我必须读取一个CSV文件并将其插入DB表“Employee”中。我正在创建TestReader的一个对象。如何编写循环以执行最多为正在读取的CSV文件的行数/记录数?

不要尝试自己解析该文件,你只会让自己头疼。这比在换行符和逗号上拆分要多得多

您可以使用OLEDB在记录集中打开文件并像在db表中一样读取它。大概是这样的:

Dim strConn, conn, rs

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
Server.MapPath("path to folder") & ";Extended Properties='text;HDR=Yes;FMT-Delimited';"

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConn

Set rs = Server.CreateObject("ADODB.recordset")
rs.open "SELECT * FROM myfile.csv", conn

while not rs.eof
    ...
    rs.movenext
wend
我的vbscript已生锈,请验证语法


编辑:harpo的评论提出了一个关于字段定义的好观点。通过定义schema.ini文件,可以定义预期字段的数量和数据类型。请参阅:可以通过定义schema.ini文件来处理此问题。请参阅:

为什么不直接插入CSV?例如:

SELECT * INTO MyTable FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0', 
'Data Source=F:\MyDirectory;Extended Properties="text;HDR=No"')...
[MyCsvFile#csv]

From:

注意:字段计数基于第一行。因此,如果文件中任何一点的字段数量增加,就无法捕获其他字段。这在我的案例中很重要,所以我推出了我自己的(虽然不是在VBScript中)。这是真的。您可以通过定义schema.ini文件()来避免此限制。这还允许您限定字段的数据类型(默认情况下,'0001'将被读取为'1')您需要在文件夹路径后使用分号-Server.MapPath(“文件夹路径”)-但这为我节省了解析CSV文件的时间-谢谢!请注意,JET CSV阅读器使用机器的默认区域设置进行解析,即使您的ASP应用程序设置了不同的区域设置,例如日期格式。因此,当使用此方法解析日期时,您可能会看到2014年12月1日变成2014年1月12日!非常棒的解决方案,但我必须在
扩展属性上应用另一种格式
,否则它抛出的初始化字符串的
格式不符合OLE DB规范。
异常。使用
扩展属性=“文本;HDR=是;FMT=用“
分隔,以避免此异常。