Не могу вставить DATE в mssql через bcp API FreeTDS на Linux - PullRequest
1 голос
/ 27 июня 2019

Когда я пытаюсь вставить DATE через bcp FreeTDS на Linux, я сталкиваюсь с этой ошибкой:

Conversion failed when converting date and/or time from character string.
create table test (c_date date);

Тип привязки этого столбца - SYBCHAR, в Windows у меня нет проблем, но я использую WinApi

...
char buff[10];
time_t time = ACE_OS::time(nullptr);
struct tm *tmp = localtime(&time);
strftime(buff, 10, "%Y-%m-%d", tmp); /// example: 2008-10-22
bcp_collen(db, 10, 1);
bcp_colptr(db, reinterpret_cast<BYTE*>(buff), 1);
bcp_sendrow(db);
bcp_batch(db); /// here the exception is thrown

Я пытался использовать другие шаблоны для форматирования даты, такие как %Y%m%d, %Y/%m/%d и т. Д., Другие типы привязки, создание locales.conf рядом с freetds.conf, но ничего ...

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Для использования поля SQL Server date необходимо использовать как минимум версию FreeTDS 0.95 и указать TDS_Version как минимум 7.3 в своем соединении.

Типы time, date, datetime2 и datetimeoffset были введены в SQL Server 2008, который был первой версией поддержки TDS версии 7.3:

https://www.freetds.org/userguide/choosingtdsprotocol.htm

Вероятно, высоединяются с версией TDS <7.3, или, если вы указали версию 8.0 TDS, она фактически соответствует 7.1.Попробуйте явно установить версию 7.3 и убедитесь, что у вас версия FreeTDS 0.95 или выше. </p>

0 голосов
/ 28 июня 2019

Мне удалось вставить дату, если вы столкнулись с той же проблемой, вам следует конвертировать в UCS2.

До состояния данных

* После 1008 *

...