我使用经典的asp将数据导入MySQL数据库,但是我遇到了一些麻烦,即使CSV文件中存在字段,我的代码也会将值返回为NULL
由于我想将CSV文件作为记录集打开,我首先必须获取远程csv文件,然后在本地保存副本并创建schema.ini文件,然后使用ADODB连接打开文件,然后我想要在将信息写入我的数据库之前,抓住信息并操纵它。
所以我首先使用MSXML2.ServerXMLHTTP抓取文件,如此
sImportURL = "http://somewebsite/somecsvfile.csv"
Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objXMLHTTP.Open "GET", sImportURL, False
objXMLHTTP.setRequestHeader "User-Agent", Request.ServerVariables("HTTP_HOST")
objXMLHTTP.Send ""
sResponse = split(objXMLHTTP.responseText, vbcrlf)
Set objXMLHTTP = Nothing
sResponse是一个已设置的数组,然后使用split将文件的每一行添加到数组中。到目前为止一切都很好!
现在我使用FSO遍历数组并在本地创建一个CSV文件,并为它创建一个模式文件
Set fsoImport = CreateObject("Scripting.FileSystemObject")
sFolder = Server.MapPath("/TempImport/")
If Not fsoImport.FolderExists(sFolder) Then sFSO.CreateFolder(sFolder)
sFileName = Server.MapPath("/TempImport/Import.csv")
If fsoImport.FileExists(sFileName) Then fsoImport.DeleteFile(sFileName)
Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)
For i = 0 to uBound(sResponse)
sImportFile.Writeline sResponse(i)
Next
sImportFile.Close
Set sImportFile = Nothing
sFileName = Server.MapPath("/TempImport/schema.ini")
If fsoImport.FileExists(sFileName) Then fsoImport.DeleteFile(sFileName)
Set sSchemaFile = fsoImport.CreateTextFile(sFileName, false)
sSchemaFile.WriteLine("[Import.csv]")
sSchemaFile.WriteLine("ColNameHeader=True")
sSchemaFile.WriteLine("Format=CSVDelimited")
sSchemaFile.WriteLine("Col1=SKU Text")
sSchemaFile.WriteLine("Col2=Quantity Double")
这也可以成功运行,csv文件看起来像这样
SKU,Quantity
"TEK",0
"KDL-60LX903",3
"BICBIRO",88
"WB001",10
现在我打开我刚刚使用ADODB连接创建的文件,如此
Set adoOpen = Server.CreateObject("ADODB.Connection")
adoOpen.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=/TempImport/;Extensions=asc,csv,tab,txt;HDR=NO;Persist Security Info=False"
adoOpen.Open
sSQL = "SELECT * FROM `Import.csv`"
Set rsOpenRS = Server.CreateObject("ADODB.Recordset")
rsOpenRS.Open sSQL, adoOpen
Do While Not rsOpenRS.EOF
sField = "SKU"
sValue = rsOpenRS(sField)
Response.Write sField & " = " & sValue & "<br />"
sField = "Quantity"
sValue = rsOpenRS(sField)
Response.Write sField & " = " & sValue & "<br />"
rsOpenRS.MoveNext
Loop
rsOpenRS.Close
Set rsOpenRS = nothing
Set adoOpen = nothing
现在即使我的CSV文件中包含数据,所有写入屏幕的内容都是
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
SKU =
Quantity =
请注意,CSV文件中有10组结果,只有5行,包括标题,我不确定发生了什么,有人有任何线索吗?
干杯
答案 0 :(得分:0)
好的,所以这只是一个愚蠢的问题,我改变了
Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)
要
Set sImportFile = fsoImport.CreateTextFile(sFileName, True)
当我在经典的asp中写这个时,我不需要ForWriting位,它没有给我一个错误它只是没有工作。
感谢所有试图提供帮助的人