23

私はこのトピックが死ぬまで行われていることを知っていますが、私は終わりに近づいています。

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.

私はすべてのコードを捨てて、最初から始めることを考えています。私が間違っていることは明らかですか?

4

5 に答える 5

42

接続文字列にはディレクトリ名のみを指定する必要があります。ファイル名はクエリに使用されます。

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 パーサー(または別のパーサー) を使用できます。

于 2011-07-25T09:50:47.087 に答える
1

別の解決策は、TextFieldParser クラス (.Net フレームワーク自体の一部) を使用することです。https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.fileio.textfieldparser

このように、休暇に出かけた他の開発者に頼る必要はありません。何度も使用していますが、引っ掛かりはありません。

これは職場から投稿したものです (そのため、スニペットの例を投稿することはできません。今晩家に帰ったら投稿します)。

于 2011-07-25T09:58:17.917 に答える
0
 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\"";
于 2011-07-25T09:12:50.247 に答える
0

最初の行には列名が含まれているようです。そのため、次のように HDR=YES プロパティを含める必要があります。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\TEST.csv;Extended Properties="Excel 12.0;HDR=YES";
于 2011-07-25T08:57:33.210 に答える
0

接続文字列を試してください:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.csv;Extended Properties=\"Excel 8.0;IMEX=1\""
于 2011-07-25T08:59:23.880 に答える