Обновление до определенного номера строки в OleDbConnection в Excel

#c# #sql #oledbconnection

#c# #sql #oledbconnection

Вопрос:

Я пытаюсь обновить поле с заданным сообщением до определенного номера строки.

Я использовал функцию ROW_NUMBER() со следующим кодом:

     string query = @"update [Cards$]
                    SET ResultMessage = '" message 
                    @"' from (select ROW_NUMBER() OVER(order by (select 1)) as Seq, * from [Cards$]) [Cards$]
                    where Seq IN ("   rowNum   ")";
  

который работает в sql server 2005.
Я обязан использовать файл Excel с OleDbConnection для этой конкретной задачи.

Я получаю следующую ошибку:

Синтаксическая ошибка (отсутствует оператор) в выражении запроса «сообщение» из (выберите ROW_NUMBER() ВМЕСТО(order by (выберите 1)) как Seq, * из [Cards $]) [Cards$]’.

как я могу это сделать, используя то же соединение?

Спасибо!

Комментарии:

1. Можете ли вы уточнить — вы имеете в виду, что связанный вами запрос работает при запуске с подключением к SQL Server 2005, но не с файлом Excel через OleDbConnection? Если это так, проблема в том, что ROW_NUMBER() является специфичной для Sql Server функцией.

2. Да, я имел в виду именно то, что вы написали. есть ли другой способ сделать это через OleDbConnection?

3. Не то, что я могу придумать. Не могли бы вы опубликовать схему таблицы [Card $] (или, по крайней мере, заголовки столбцов из Excel) — мы могли бы предложить лучшую стратегию для достижения того, что вы пытаетесь сделать.

4. Мой внутренний инстинкт заключается в том, что это то, что было бы лучше обслуживать с помощью простого VBA, а не обращаться к Excel через OleDbConnection. Не могли бы вы также дать краткое описание структуры, с которой мы здесь имеем дело, в двух предложениях, что привело к принятию этого конкретного архитектурного решения?

5. Похоже, что вы делаете это с C # и хотите выполнить итеративную задачу в электронной таблице Excel, вместо этого используйте взаимодействие с Microsoft Excel , таким образом, вы можете выполнить простое решение типа «для каждой строки выполните x, установите сообщение y». Значительно проще, чем пытаться открыть как набор данных, только для последовательной обработки в любом случае.