使用OleDbConnection、DataTable读取CSV文件时行列格式错误如何解决
C#读取分号分隔CSV文件格式错误问题
我在处理CSV文件时遇到了问题,尝试从CSV文件中读取行列数据,但现有代码无法获取正确格式的行列数据。
当前使用的OleDb实现代码
DataTable dt = new DataTable(); string FileName = strFilePath; using (FileStream stream = File.Open(Path.Combine(@"C:\Users\mulus\Desktop", "schema.ini"), FileMode.Create, FileAccess.Write, FileShare.None)) { using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine(string.Format("[{0}]", FileName)); writer.WriteLine("Format=Delimited(;)"); writer.WriteLine("TextDelimiter=\""); writer.WriteLine("ColNameHeader=True"); } } OleDbConnection conn = new OleDbConnection ("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(FileName) + "; Extended Properties = \"Text;FMT=Delimited(;)\""); conn.Open(); var abc = Path.GetFileName(FileName); OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileName(FileName), conn); adapter.Fill(dt); conn.Close();
已尝试的解决方案
所有方案均未解决问题:
- 尝试修改FileStream类的不同格式参数
- 不使用FileStream类实现
- 将连接字符串中的
; Extended Properties = "Text;FMT=Delimited(;)"修改为Format=Delimited(;)、FMT=TabDelimiter、Format=TabDelimiter,均未生效,配置被忽略 - 尝试直接修改注册表对应配置,但出现报错(无法编辑:写入值的新内容时出错)
- 尝试为自身账户分配“完全控制”权限,但无足够权限操作
备用实现方案的问题
我也尝试使用直接读取拆分的代码实现,但该代码会忽略被引号包裹字段内的;符号(如"45;43"),将其识别为2列而非1列,整体格式非常混乱,且容错率低,并不是合适的实现方案:
using (StreamReader sr = new StreamReader(strFilePath, Encoding.Default)) { string[] headers = sr.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.None); foreach (string header in headers) { dt.Columns.Add(header); } while (!sr.EndOfStream) { string[] rows = sr.ReadLine().Split(';'); DataRow dr = dt.NewRow(); for (int i = 0; i < headers.Length; i++) { dr[i] = rows[i]; } dt.Rows.Add(dr); } }
如果大家知道问题出在哪里或者有其他实现思路,还请不吝赐教,非常感谢。
运行环境
- Windows 7
- Excel 2010
内容的提问来源于stack exchange,提问作者M. Ulus
相关产品推荐
相关产品推荐

