現在、この関数を使用して CSV ファイルをインポートしようとしています。
public DataSet ImportCommaSeparatedValueFileToDataSet(string SourceFile)
{
var dsImportCSVtoDataSetReturn = new DataSet();
using (var objAdapter1 = new OleDbDataAdapter())
{
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourceFile.Substring(0, SourceFile.LastIndexOf(@"\")) + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
var objConnection = new OleDbConnection(sConnectionString);
objConnection.Open();
var objCmdSelect = new OleDbCommand("SELECT * FROM " + SourceFile, objConnection);
objAdapter1.SelectCommand = objCmdSelect;
objAdapter1.Fill(dsImportCSVtoDataSetReturn);
objConnection.Close();
}
return dsImportCSVtoDataSetReturn;
}
ファイル名にスペースが含まれていないファイルをインポートしようとすると、正常に機能します。次のファイルをインポートしようとすると:
D:\Workspace\WoldCard export.csv
次に、次の例外を受け取ります。
excException = {"Syntax error in FROM clause."}
Source = "Microsoft JET Database Engine"
StackTrace " at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)\r\n at CommonObjects4.clsUtilityOffice.ImportCommaSeparatedValueFileToDataSet(String SourceFile) in D:\\DevProjects\\CommonObjects4\\classes\\clsUtilityOffice.cs:line 262" string
したがって、SQL 句のファイル名にスペースが含まれていることが問題であることは明らかです。ただし、問題を解決するために一重引用符を使用しようとすると:
var objCmdSelect = new OleDbCommand("SELECT * FROM '" + SourceFile + "'", objConnection);
次に、次の例外を受け取ります。
excException = {"''D:\Workspace\WoldCard export.csv'' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long."}
また、パラメーターを使用しようとすると:
var objCmdSelect = new OleDbCommand("SELECT * FROM @SourceFile", objConnection);
objCmdSelect.Parameters.Add("@SourceFile", SqlDbType.NVarChar).Value = SourceFile;
次に、次の例外を受け取ります。
excException = {"Syntax error in query. Incomplete query clause."}
また、後でhttp://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/1c399bf7-a6b3-47bb-8897-d4247b4938f0から、テーブル名をパラメーターにすることはできないことを知りました。誰か提案はありますか?ティア。