2014-12-22 4 views
3

Я перехожу от поставщика 'Microsoft.Jet.OLEDB.4.0' к 'Microsoft.ACE.OLEDB.12.0', поскольку я запускаю свою программу на 64-битной системы, и я понимаю, что ACE заменил Jet на 64-битное использование.Microsoft ACE OLEDB 12.0 - синтаксис F1 для без заголовка .CSV вызывает исключение

Я не изменил синтаксис запроса я прохожу к моему OleDbCommand, но теперь он вызывает исключение:

«Нет значения приведены для одного или нескольких требуемых параметров.»

код выглядит следующим образом:

static void Main(string[] args) 
{ 
    const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\PimsImport\\PreciousStore\\imports;Extended Properties='Text;HDR=NO;IMEX=1'"; 
    const string selectStatement = "SELECT F1 AS NameColumn FROM C:\\PimsImport\\PreciousStore\\imports\\PIMSPreciousbradypxx.csv"; 

    using (var connection = new OleDbConnection(connectionString)) 
    { 
     using (var cmd = new OleDbCommand(selectStatement, connection)) 
     { 
      cmd.Connection.Open(); 
      OleDbDataReader workbookReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
      workbookReader.Close(); 
     } 
    } 
} 

Если удалить F1 и заменить *; он отлично работает. Но у моего csv нет заголовка, поэтому я хочу использовать синтаксис F1, чтобы взять первый столбец.

Любая идея, почему это больше не работает?

ответ

1

В вашей выбрать попробовать сделать следующее изменение

"SELECT [F1] AS NameColumn FROM [myTable]" 

Вместо того [] вы также можете использовать '', а также.

И я не уверен, что если вы только что написали этот фрагмент кода для временного вопроса, но я бы рекомендовал вам управлять строками с чем-то вроде

string sql = string.Format("SELECT [{0}] FROM [{1}]", myColumnVar, myTableVar); 

и если более сложного рассмотреть параметризующий запрос , Обратитесь к примеру How to parameterize complex OleDB queries?.

+0

Да, это исправлено. Проблема возникает из-за использования полного пути к файлу в предложении from - это подчеркивается, очевидно, в исключении «From Clause», когда вы окружаете предложение from в квадратных скобках. Необходимо указать имя файла. –