OLEDB, Writing ячейка Excel без ведущего апострофа

РЕДАКТИРОВАТЬ: Как упоминал Юзеф в одном ответе,? не следует помещать между строковым литералом "%?%", поэтому добавьте% к строковому параметру, прежде чем он будет задан в запросе. В вашем sql-запросе нет параметра ...

заменить запрос на

String sql = "SELECT * FROM  user where userName LIKE ?"

? это параметр, где будет установлена ​​ваша строка.
где строка будет похожа на "%"+inputString+"%";

6
задан Maciej 19 April 2009 в 03:19
поделиться

8 ответов

http://support.microsoft.com/kb/257819 содержит утверждение о том, что такое поведение может быть неизбежным при вставке текста в Excel через ADO:

A предостережение при редактировании данных Excel с помощью ADO : при вставке текстовых данных в Excel с помощью ADO текстовому значению предшествует одинарная кавычка. Это может позже вызвать проблемы при работе с новыми данными.

Являются ли данные явно текстовыми, могут ли они быть приведены в числовой формат? (хватается за соломинку ...)

7
ответ дан 10 December 2019 в 02:53
поделиться

Не могли бы вы просто использовать Excel DSN? Это кажется довольно вездесущим. Я не знаю .NET, так что возьмите это с крошкой соли, но вот моя строка подключения для OLEDB-запроса прямо из таблицы запасов:

"Provider=MSDASQL.1;Persist Security Info=True;Extended Properties
=""DSN=Excel Files;DBQ=" & filePath & "\" & fileName &
";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"""

И я использовал этот базовый оператор INSERT:

INSERT INTO rngOutput VALUES (1, 'ABC', '$1.00', 1300)

Когда я это сделал У меня не было апострофов в моем диапазоне данных. Я также использую Excel 2007 и вижу, что вы используете Excel 8.0 в качестве драйвера?

Надеюсь, это подтолкнет вас к решению!

2
ответ дан 10 December 2019 в 02:53
поделиться

Удалите IMEX = 1 из строки подключения.

http://www.connectionstrings.com/excel

0
ответ дан 10 December 2019 в 02:53
поделиться

Я знаю, что при вводе данных в Excel префикс с апострофом - простой способ превратить их в текст поле. Вы уверены, что данные на самом деле не содержат апостроф? Если он добавляется к данным во время ввода, единственным вариантом будет перехватывать их во время импорта и работать с ними в каком-то пользовательском коде.

0
ответ дан 10 December 2019 в 02:53
поделиться

Проверьте сопротивление Hkey_Local_Machine / Программное обеспечение / Microsoft / Jet / 4.0 / Engines / Excel / TypeGuessRows

Это решает, сколько строк должно быть отсканировано, прежде чем выбрать формат для столбца. По умолчанию установлено значение 8, и 0 заставит ADO сканировать все значения столбцов, прежде чем выбрать соответствующий тип данных.

0
ответ дан 10 December 2019 в 02:53
поделиться

Это может не соответствовать вашим требованиям, особенно если вам нужно настроить форматирование на листе Excel, но вы рассматривали возможность записи данных в файл CSV и сохранения их с расширением .XLS

Еще одна вещь, которую вы могли бы попробовать, это явно установить типы данных форматирования ваших целевых ячеек на листе Excel, чтобы ввести «Текст» (как в «Формат> Ячейки в Excel»), прежде чем пытаться загрузить данные. По умолчанию ячейки будут иметь тип «Общие», и драйвер может добавлять апостроф, чтобы заставить ваши данные отображаться в тексте.

0
ответ дан 10 December 2019 в 02:53
поделиться

Попробуйте следующий прием для решения проблемы. Измените шаблон в соответствии с инструкциями

  1. В первой строке данных сразу под строкой заголовка. Отформатируйте столбцы в требуемом формате.
  2. Введите некоторые фиктивные значения, такие как пробел для символов, 0 для числовых значений и т. Д.
  3. Скройте первую строку данных с фиктивными значениями и сохраните шаблон

Теперь запустите вставку скрипт с использованием ADO.net

-Venkat Kolla

-1
ответ дан 10 December 2019 в 02:53
поделиться

Вставьте несколько фиктивных значений для столбцов, которые имеют апостроф в файле шаблона. Скажем, для столбца Name вставьте что-то вроде этого dummyname, а для столбца age - 99. Вместо того, чтобы вставлять новую строку в шаблон, просто обновите строку (Update..... where Name = 'dummyname' and age =99).

Это сработало для меня...

Надеюсь, это сработает и для вас!

1
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: