Connector.DBEngine и региональный формат даты в БД

При выполнение скрипта, дата передаеться текстом (а могла бы безопасно через convert или cast):

exec sp_executesql N'update [vw_ChangeRequest] set EstimatedDueDate = @P1 where ReleaseID = @P2',N'@P1 nvarchar(4000),@P2 uniqueidentifier',N'23.09.2013','23ADF24D-AB85-437D-85BA-AD3CD1A9A4F8'

автоматическая конвертация срабатывает относительно формата дефолтных настроек БД. Соотвественно в БД формат другой, запрос падает. Я могу как то указать для ExecuteCustomSQL, как правильно работать с датой? Очень не хочеться писать генерацию нужной строки с cast или convert.

Пример кода:

var Parameters = System.CreateObject('TSObjectLibrary.Parameters');
var ReturnParameter1 = Parameters.CreateItem();
ReturnParameter1.Name = 'ReleaseID';
ReturnParameter1.DataType = pdtGUID;
ReturnParameter1.Value =  Dataset('ID');
Parameters.Add(ReturnParameter1);
Connector.DBEngine.ExecuteCustomSQL("update [vw_ChangeRequest] set StatusID = '{06DF639B-AC5D-48DF-88EE-EFD0369E80D3}' where ReleaseID = :ReleaseID",Parameters);

Нравится

5 комментариев

Как то странно работают функции получить день и месяц(24 сентября плавно превращаеться во 2 августа):

Почему?

"Борисов Михаил Евгеньевич" написал:

Почему?


Добрый день!

getDay() возвращает целое число, обозначающее день недели: 0 - воскресенье, 1 - понедельник, 2 - вторник, и т.д.

getMonth() возвращает целое число от 0 до 11. 0 соответствует январю, 1 - февралю, и т.д.

Спасибо. А по Connector.DBEngine и региональным стандартам не подскажете как быть? Функцию я дописал, которая меня будет экронировать от настроек БД, но как то это некрасиво.

P.S. я очень люблю JS, я очень люблю JS, я не люблю C#, я не люблю C# он слишком логичен, в нем день недели DayWeak, это ж так каждый поймет что там лежит

В общем сделал так:

function GetSQLDate(Data) {
	Result="convert(datetime,'"+(Data.getUTCDate()+1)+'.'+(Data.getMonth()+1)+'.'+Data.getFullYear()+"',104)";
 
	return Result;
}

И способ использования велосипеда:

 var EstimatedReleaseDate=  GetSQLDate(new Date(Dataset('EstimatedReleaseDate')));
 Connector.DBEngine.ExecuteCustomSQL("update [vw_ChangeRequest] set EstimatedDueDate = "+EstimatedReleaseDate+" where ReleaseID = :ReleaseID",Parameters);

Здравствуйте, Михаил!
Попробуйте еще использовать функцию getVarDate() для получения даты в нужном формате.

Показать все комментарии