【发布时间】:2009-09-22 21:07:15
【问题描述】:
我有一个类型化的 XML 列,我在其中存储来自具有 DateTime 属性的 C# 对象的序列化。当我将 DateTime 存储在数据库中时,它是 Local 类型 - 尽管序列化的 XML 显示的时间与 GT 时间有偏移,如 '2009-09-22T13:52:32.2346252-07:00'(我住在俄勒冈州)。 当我(从 SQL Management Studio 中)读取表时,XML 以 UTC 类型显示 DateTime 对象。 有没有办法控制这种行为?尊重我输入的数据的时区对我来说很重要,因为它可能来自不同的来源,当我将其取出时我需要尊重这一点。 从数据库读取对象后,我也不想将每个日期时间字段从 UTC 转换为本地。
这是我存储的对象的 C# 定义:
[Serializable]
[XmlType(Namespace="urn://MySchema")]
public class MyObject
{
public DateTime RecordTime { get; set; }
// .. omitted for clarity
}
这是表格的定义(为清楚起见进行了简化)
CREATE TABLE MyTable(
[ID] [int] IDENTITY(1,1) NOT NULL,
[MyKey] [int] NULL,
[TheObject] [xml](CONTENT [dbo].[MySchema]) NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这就是我的存储过程的样子(也简化了)
ALTER PROCEDURE [dbo].[SaveMyObjects]
@where int,
@object xml
AS
BEGIN
INSERT INTO MyTable
(MyKey, TheObject)
VALUES(@where, @object)
END
我需要做两件不同的事情:
- 我想控制序列化 XML 中日期字符串的格式 - 我更喜欢那个时间字符串的 ISO 格式
- 我不希望将 DateTime 转换为 UTC 时 我将它存储在数据库中,但我希望方便地将其保存为 日期时间字段。
我该怎么做?任何想法、指针、指向某个上帝博客的链接显示我的错误等,将不胜感激。
【问题讨论】: