C# 如何在sql server中设置年份到日期时间的字符串

C# 如何在sql server中设置年份到日期时间的字符串,c#,asp.net,datetime,C#,Asp.net,Datetime,我有一个没有日历控件的文本框,我们将其称为发布年(我们在项目中使用diff名称)。出版年份为1999年、2001年或1860年 我的步子是这样的 我的数据库中有datetime。(不可更改) 我正在使用C#和sql server 2005 string date = textBox1.text; Datetime dt = Convert.ToDateTime(date); 我使用动态sql将dt传递给我的数据库 为了欺骗代码,我在输入日期(如2010年1月1日)之前添加了前缀1/1/,效果很

我有一个没有日历控件的文本框,我们将其称为发布年(我们在项目中使用diff名称)。出版年份为1999年、2001年或1860年

我的步子是这样的

我的数据库中有datetime。(不可更改)

我正在使用C#和sql server 2005

string date = textBox1.text;
Datetime dt = Convert.ToDateTime(date);
我使用动态sql将dt传递给我的数据库

为了欺骗代码,我在输入日期(如2010年1月1日)之前添加了前缀1/1/,效果很好


现在我的TL让我不要那样做。。。。我是。请帮助

您可以使用带有可用年份的下拉列表?如果只有三个可能的出版年份,那么作为一个输入控件,这将更有意义。抓取年份,用“1”分别填充DateTime月和日值。

听起来你真的应该:

  • 将文本解析为整数
  • 创建一个新的
    DateTime
    ,将该年份和1月1日作为日期/月份
例如:

int year;
if (int.TryParse(textBox1.Text, out year))
{
    DateTime dt = new DateTime(year, 1, 1);
}
else
{
    // Handle input
}

请注意,如果您只关心年份,那么我强烈建议数据库字段应该是Int而不是DateTime

最小sql datetime值为1/1/1753,原因有很多,您可以选择。然而,关键是常规的DateTime字段存储的信息比您所关心的要多得多


因此,如果您处理1753年以前的出版物,您将遇到一个架构问题。而且,如果你不知道怎么做,你肯定会遇到问题,决定一本出版物是280年还是279年或281年

@Lucero:可能是“团队领袖”@Chris Lively,是的,可能是。但是这就引出了一个问题,为什么球队的领头羊没有提出更好的方法。@Lucero:我想这就引出了一个问题,为什么他们的头衔中会有“领头羊”。)也许另一个L字是合适的。如果您根据字符串操作日期,我建议始终使用标准化的ISO-8601格式(
YYYYMMDD
),因为它不依赖于任何区域、语言、区域设置,并且始终有效。因此,在您的情况下,只需将您的
2010
转换为
20100101
,您的转换将始终不会出现问题。+1-对于1753年之前的出版物,最好只需切换到SQL Server 2008并使用
datetime2
;)