We’re converting a Classic ASP site to an ASP.NET site. One function was to upload a ‘template’ of data in CSV format for importing into the database. There were several different record types in there (the first field always indentifies the type of data).
The task was to get the CSV into a DataTable so it could be validated (new project is to have MUCH better validation rules)
The code seemed pretty straightforward – watered down (taking out comments, Try/Catch, etc) it is as follows:
Dim da As New System.Data.OleDb.OleDbDataAdapter
Dim cn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDirectory & ";" & "Extended Properties=""Text;HDR=No;FMT=Delimited;""")
Dim cd As New System.Data.OleDb.OleDbCommand("SELECT * FROM " & strCSVFilename, cn)
cn.Open()
da.SelectCommand = cd
da.Fill(dtData)
The DataTable (dtData) is populated, but only starting with the second line of the CSV file DESPITE the fact that “HDR=No” is in the connection string.
What am I missing here?
Is there maybe something at the begining of the file that’s causing the first row to be skipped? Maybe a non-printable character? The NPC could come from the file not being saved in an expected encoding. When I created a CSV file I received the results that you expected. Here’s the code that I used to test:
If you change the initial encoding to Unicode you’ll get 8 and 9 rows in the results instead which is maybe what you’re seeing. If it turns out to be an encoding problem you can add
CharacterSet=Unicodeto your extended properties.