I can't seem to read a .csv file using the following connection string:
var fileName = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Uploads\\countrylist.csv");
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", fileName);
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();
It gives the following error:
'D:\arrgh\arrgh\Uploads\countrylist.csv' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.
I verified that the file is there. What is happening here?
I had the same problem a few weeks ago trying to do some Office 2007 automation and spent too much time trying to fix it.
If the D drive is a mapped network drive then you may need to use the UNC path:
Ok, I dug a little further and it seems that my connection string is wrong. With CSV files, you don't specify the actual file name but the directory where it belongs, eg.
And you specify the filename in the SelectCommand. What a strange way of doing it. It's working for me now.
I recommend you use a CSV parser rather than using the OLEDB data provider.
Search and you'll find many (free) candidates. Here are a few that worked for me:
A portable and efficient generic parser for flat files (easiest to use, IMO)
A Fast CSV Reader (easy to use, great for large data sets)
FileHelpers library (flexible, includes code generators, bit of a learning curve)
Typically these will allow you to specify properties of your CSV (delimiter, header, text qualifier, etc.) and with a method call your CSV is dumped to a data structure of some sort, such as a DataTable or List<>.
If you'll be working at all with CSV, it's worth checking out a CSV parser.
If you're just trying to read a CSV file with C#, the easiest thing is to use the Microsoft.VisualBasic.FileIO.TextFieldParser class. It's actually built into the .NET Framework, instead of being a third-party extension.
Yes, it is in
Microsoft.VisualBasic.dll
, but that doesn't mean you can't use it from C# (or any other CLR language).Here's an example of usage, taken from the MSDN documentation:
Again, this example is in VB.NET, but it would be trivial to translate it to C#.
try this, A Fast CSV Reader, efficient CSV parser
CsvReader