Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OPENXML, UTC дата и смещение на два часа  [new]
Var79
Member

Откуда:
Сообщений: 890
DECLARE  @xmlText nvarchar(max)
set @xmlText = N'<?xml version="1.0" encoding="utf-16"?>
<ArrayOfProgramGroupSchedule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>1</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>2</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>3</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>4</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>5</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>6</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
  <ProgramGroupSchedule>
    <ProgramGroupScheduleId>0</ProgramGroupScheduleId>
    <ProgramGroupId>1</ProgramGroupId>
    <WeekDayId>7</WeekDayId>
    <ProgramGroupScheduleStartTime>2009-11-19T11:41:33.9018551+02:00</ProgramGroupScheduleStartTime>
    <ProgramGroupScheduleEndTime xsi:nil="true" />
    <ChildrenNumber>1</ChildrenNumber>
    <StaffNumber>1</StaffNumber>
    <TeacherId>1</TeacherId>
  </ProgramGroupSchedule>
</ArrayOfProgramGroupSchedule>'

	
    DECLARE @idoc int
	EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlText

SELECT 
		ProgramGroupScheduleId,
		ProgramGroupId,
		WeekDayId,
		ProgramGroupScheduleStartTime,
		ProgramGroupScheduleEndTime,
		ChildrenNumber,
		StaffNumber,
		TeacherId
	FROM   OPENXML (@idoc, '/ArrayOfProgramGroupSchedule/ProgramGroupSchedule',2)
			 WITH (ProgramGroupScheduleId			bigint,
				   ProgramGroupId					bigint,
				   WeekDayId						tinyint,
				   ProgramGroupScheduleStartTime    datetime,
				   ProgramGroupScheduleEndTime      datetime,
				   ChildrenNumber					int,
				   StaffNumber						int,
				   TeacherId						bigint)

	               
	EXEC sp_xml_removedocument @idoc

можете выполниить этот код и увидеть что вернется результат на два часа меньше (часовой пояс +02:00)

как указать что бы OPENXML обработал это смещение нормально? изменять xml не предлагать, тк как это видимо нормальная серелизация в .NET

select @@version
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009 10:11:52 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
19 ноя 09, 12:52    [7950179]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML, UTC дата и смещение на два часа  [new]
Var79
Member

Откуда:
Сообщений: 890
поскольку не отвечают расскажу что это вообще :-)
на стороне c# приложения есть список entities, его нужно передать на SQL SERVER,
этот список сереализую в xml, и передаю как xml-text на sql server

XmlSerializer serializer = new XmlSerializer(collection.GetType());
                using (StringWriter stringWriter = new StringWriter())
                {
                    serializer.Serialize(stringWriter, collection);
                    result = GetParameter(parameterName,
                                      stringWriter.ToString());
                }
вот примерно так
19 ноя 09, 13:08    [7950302]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML, UTC дата и смещение на два часа  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если вам не нужен часовой пояс, то зачем вы пишите информацию о нем в свой xml ?
19 ноя 09, 13:10    [7950330]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML, UTC дата и смещение на два часа  [new]
Var79
Member

Откуда:
Сообщений: 890
потому что используется стандартный .NET сереализатор, я не знаю способа как узазать типу DateTime что бы он сереализовался без часового пояса, может быть можно, но я подумал что логичней на стороне SQL сервера это разрулить
19 ноя 09, 13:14    [7950361]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML, UTC дата и смещение на два часа  [new]
Glory
Member

Откуда:
Сообщений: 104760
Var79
потому что используется стандартный .NET сереализатор, я не знаю способа как узазать типу DateTime что бы он сереализовался без часового пояса, может быть можно, но я подумал что логичней на стороне SQL сервера это разрулить

Ну так рулиите. Конвертируйте данные не в datetime в varchar, парсите, удаляйте ненужное и тд
19 ноя 09, 13:17    [7950397]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML, UTC дата и смещение на два часа  [new]
Var79
Member

Откуда:
Сообщений: 890
кому интерестно сделал
programGroupSchedule.ProgramGroupScheduleStartTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
сереализуется без +02:00 единственно что задается при присвоении, а не при сереализации.
щас поищу можно ли тоже сделать атрибутом в сереализуемом классе
19 ноя 09, 13:23    [7950453]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить