@ xr280xr: Конечно, есть много разных вещей, которые могут случиться, но я думаю, что здесь важно выделить разные аспекты: у вас есть веб-служба, предоставляющая данные, код посередине и база данных. Если вы можете воспроизвести проблему без веб-службы (создавая данные локально), это устраняет один аспект. Если вы можете воспроизвести проблему без базы данных (путем записи строки), это устраняет еще один аспект.
я проблема с тем, что строка DateTime в C # не удается преобразовать в SQL DateTime, поскольку она таинственным образом форматируется как дата в Великобритании (дд / мм / гггг). Вот серия событий:
Объект создается на удаленном сервере в США и сериализуется в XML.XML десериализуется на локальном компьютере в CA обратно к объекту. Дата сериализации выглядит следующим образом: 2011-07-13T09: 56: 57.0542425Приложение пытается сохранить объект в базе данных, вызывая ранее упомянутую хранимую процедуру. Он (без необходимости) преобразует дату в строку перед передачей ее в качестве параметра sproc с помощью Convert.ToString (DateTime).Sproc завершается с ошибкой SqlException «Ошибка преобразования типа данных nvarchar в datetime», поскольку полученная строка для своего типизированного параметра DateTime была в формате dd / MM / yyyy (а язык базы данных - английский США).Теперь код не должен преобразовывать дату и время в строку только для преобразования обратно в дату и время в SQL, но эта проблема только начала возникать (на нескольких компьютерах) после того, как все было хорошо в течение года. Поэтому я подумал, что культура БД или ОС, должно быть, недавно изменилась, заставив их использовать разные форматы даты. К моему удивлению, после изменения ОС (Windows 7) с английского (Канада) на английский (США) и перезапуска проблема по-прежнему возникает. Чтобы сделать это еще более запутанным, ошибка не возникает, когда один и тот же тип объекта создается локально, а не десериализовано, независимо от региональных настроек. Единственное отличие заключается в том, что версия сериализации происходит в службе Windows, а локально созданная версия объекта - в приложении Windows. Они оба используют свою собственную копию сборки, которая вызывает Convert.ToString (DateTime), но они используют одну и ту же версию этой сборки. Я совершенно сбит с толку.
Постскриптум .NET 2.0 и SQL Server 2005