Microsoft.ACE.OLEDB.12.0 CSV ConnectionString

我知道这种问题会不时被问到,但我找不到任何令人满意的解决方案。

如何使用MS ACE OLEDB 12打开CSV文件? 我尝试使用以下代码。

DbConnection connection = new OleDbConnection(); connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Documents;Extended Properties=\"Text;HDR=Yes\""; connection.Open(); DbCommand cmd; cmd = connection.CreateCommand(); cmd.CommandText = "SELECT * FROM [Mappe1#csv]"; DbDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) Console.Write("(" + reader.GetValue(i).ToString() + ")"); Console.WriteLine(); } cmd.Dispose(); connection.Dispose(); Console.WriteLine("Done"); Console.ReadKey(); 

问题是只找到一列。 文本由’;’分隔。 即使我用“Delimited(|)”指定分隔符,它也不起作用。

我找不到这个提供商的任何文档……

这有助于我使用ACE.OLEDB.12.0在C#中解析以分号分隔的csv: http ://sqlserverpedia.com/blog/sql-server-bloggers/use-ace-drivers-and-powershell-to-talk- to-text-files / :

使用以下内容在与要导入的csv文件相同的目录中创建schema.ini文本文件:

 [fileIwantToImport.csv] Format=Delimited(;) ColNameHeader=True 

为我工作。 但是很难过。

看起来像连接字符串中的FORMAT=Delimited(;)已经过时了……

尝试:

 connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Documents;Extended Properties=\"Text;HDR=Yes;FORMAT=Delimited\""; 

(在连接字符串的扩展属性中插入“FORMAT = Delimited”…)

你考虑过创建DataSet吗?

  public static DataSet ConvertTabFiles(string File, string TableName, string delimiter) { //The DataSet to Return DataSet result = new DataSet(); //Open the file in a stream reader. StreamReader s; try { s = new StreamReader(@File); } catch { MessageBox.Show("Can't perform operation on file: " + File); return result; } //Split the first line into the columns string[] columns = null; try { columns = s.ReadLine().Split(delimiter.ToCharArray()); } catch { MessageBox.Show("Can't parse the file " + File + ", please try again!"); return result; } //Add the new DataTable to the RecordSet result.Tables.Add(TableName); //MessageBox.Show("Add the new DataTable to the RecordSet"); //Cycle the colums, adding those that don't exist yet //and sequencing the one that do. foreach (string col in columns) { bool added = false; string next = ""; int i = 0; while (!added) { //Build the column name and remove any unwanted characters. string columnname = col + next; //See if the column already exists if (!result.Tables[TableName].Columns.Contains(columnname)) { //if it doesn't then we add it here and mark it as added result.Tables[TableName].Columns.Add(columnname); added = true; } else { //if it did exist then we increment the sequencer and try again. i++; next = "_" + i.ToString(); } } } //Read the rest of the data in the file. string AllData = s.ReadToEnd(); string[] rows = AllData.Split("\r\n".ToCharArray()); //Now add each row to the DataSet foreach (string r in rows) { //Split the row at the delimiter. string[] items = r.Split(delimiter.ToCharArray()); //Add the item result.Tables[TableName].Rows.Add(r); } //Return the imported data. return result; }