2

OleDbインターフェイスを使用してCSVファイルを読み取ろうとしましたが、何か奇妙なことに気づきました。

var filePath = @"C:\set2\orders3_1.csv";
var fileDirPath = Path.GetDirectoryName(filePath);
SqlBulkCopy bcp = new SqlBulkCopy("Data Source=.; Initial Catalog=indexer; Integrated Security=SSPI");
OleDbConnection cxn = new OleDbConnection();
cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + fileDirPath;
OleDbCommand cmd = cxn.CreateCommand();
cmd.CommandText = string.Format("Select [OrderNumber] from [{0}]", Path.GetFileName(filePath));
cxn.Open();
var rdr = cmd.ExecuteReader();
bcp.DestinationTableName = "PersonTable";
bcp.WriteToServer(rdr);
rdr.Close();
cxn.Close();

ファイル名を入れorders3_1.csvたら大丈夫です。しかし、ファイル名をorders3.1.csvコードに変更すると、ファイルが見つからないという例外が発生します...

これはJETプロバイダーの既知の問題ですか?

4

2 に答える 2

0

ファイル名全体を引用符で囲む必要がありますが、これはリテラル文字列であるため、\を使用してエスケープします

cxn.ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=\"{0}\"",fileDirPath);

コードの上記の行を変更すると、機能するはずです。

于 2012-10-25T07:48:19.543 に答える
0

はい、そうです。Jetはファイル拡張子についてかなりうるさいです:

もう1つの潜在的な問題は、デフォルトでは、(少なくともAccessでは)使用できるファイル拡張子が制限されていることです。箱から出して、使用できるファイル拡張子はtxt、csv、tab、ascのみです。

--http ://www.databasejournal.com/features/msaccess/article.php/3853531/Working-with-external-text-files-in-MS-Access.htm

レジストリを変更して、他のレジストリを受け入れるようにすることができます。

于 2012-10-25T16:12:50.763 に答える