使用C#使用OleDb解析CSV

我知道这个话题已经完成了死亡,但我还是有智慧。

我需要解析一个csv。 这是一个非常普通的CSV和解析逻辑是由另一个开发人员使用OleDB编写的,他在他去度假之前发誓它有效:)

CSV sample: Dispatch Date,Master Tape,Master Time Code,Material ID,Channel,Title,Version,Duration,Language,Producer,Edit Date,Packaging,1 st TX,Last TX,Usage,S&P Rating,Comments,Replace,Event TX Date,Alternate Title ,a,b,c,d,e,f,g,h,,i,,j,k,,l,m,,n, 

我遇到的问题是我遇到了各种错误,具体取决于我尝试的连接字符串。

当我尝试连接字符串时:

 Provider=Microsoft.Jet.OLEDB.4.0;Data Source="D:\TEST.csv\";Extended Properties="text;HDR=No;FMT=Delimited" 

我收到错误:

 'D:\TEST.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. 

当我尝试连接字符串时:

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\TEST.csv;Extended Properties=Excel 12.0; 

或连接字符串

 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.csv;Extended Properties=Excel 8.0; 

我收到错误:

 External table is not in the expected format. 

我正在考虑丢弃所有代码并从头开始。 有什么明显我做错了吗?

您应该只在连接字符串中指明目录名称。 文件名将用于查询:

 var filename = @"c:\work\test.csv"; var connString = string.Format( @"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", Path.GetDirectoryName(filename) ); using (var conn = new OleDbConnection(connString)) { conn.Open(); var query = "SELECT * FROM [" + Path.GetFileName(filename) + "]"; using (var adapter = new OleDbDataAdapter(query, conn)) { var ds = new DataSet("CSV File"); adapter.Fill(ds); } } 

而不是OleDB你可以使用一个体面的CSV解析器 (或另一个 )。

看来你的第一行包含列名,所以你需要包含HDR = YES属性,如下所示:

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\TEST.csv;Extended Properties="Excel 12.0;HDR=YES"; 

尝试连接字符串:

 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.csv;Extended Properties=\"Excel 8.0;IMEX=1\"" 
  var s=@"D:\TEST.csv"; string dir = Path.GetDirectoryName(s); string sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=\"" + dir + "\\\";" + "Extended Properties=\"text;HDR=YES;FMT=Delimited\""; 

备用解决方案http://msdn.microsoft.com/en-us/library/x710fk43(v=VS.100).aspx

这样您就不必依赖已经去度假的其他开发人员。 我已经多次使用它并没有遇到任何障碍。