web-dev-qa-db-ja.com

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();

問題は、列が1つしか見つからないことです。テキストは「;」で区切られます。 「Delimited(|)」で区切り文字を指定した場合でも、f.e。効果がないでしょう。

このプロバイダーのドキュメントが見つかりません...

9
Daniel Bişar

これは、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(;)が時代遅れになっているようです...

7
almher

試してみてください:

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

(接続文字列の拡張プロパティに「FORMAT = Delimited」を挿入しています...)

0
blech