Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在sql server的日期字段中仅插入日和月、月和年或任意组合_C#_Asp.net_Sql Server 2008 R2 - Fatal编程技术网

C# 如何在sql server的日期字段中仅插入日和月、月和年或任意组合

C# 如何在sql server的日期字段中仅插入日和月、月和年或任意组合,c#,asp.net,sql-server-2008-r2,C#,Asp.net,Sql Server 2008 R2,我在数据库中有一个数据类型为date的“出生日期”字段。在我的aspx页面中有三个相同的下拉列表。一个下拉列表为天,一个下拉列表为月,一个下拉列表为年。如果用户仅选择日和月或月和年或任意组合。如何将其插入数据库的日期字段中 如果用户仅选择日和月或月和年或任何组合。如何将其插入数据库 谢谢,两个选项: 在数据库中的单独(可为空)字段中保留日、月和年 在数据库中保留一个DateTime字段,在未提供时用“虚拟”数据填充,并有一个单独的字段来指示提供了哪些信息 对我来说,第一个听起来更合理——你不

我在数据库中有一个数据类型为date的“出生日期”字段。在我的aspx页面中有三个相同的下拉列表。一个下拉列表为天,一个下拉列表为月,一个下拉列表为年。如果用户仅选择日和月或月和年或任意组合。如何将其插入数据库的日期字段中

如果用户仅选择日和月或月和年或任何组合。如何将其插入数据库

谢谢,

两个选项:

  • 在数据库中的单独(可为空)字段中保留日、月和年
  • 在数据库中保留一个
    DateTime
    字段,在未提供时用“虚拟”数据填充,并有一个单独的字段来指示提供了哪些信息

对我来说,第一个听起来更合理——你不能用“1976年某个月的第19个月”来做很多与日期相关的合理查询,这意味着你的数据准确地代表了用户指定的内容。

在用户选择所有字段之前,不允许用户提交答案。这是标准的方法。您可以使用验证器进行验证。 或者试试这个(我不确定) 1.保持日期字段为空。 和/或

2.如果(txtDate.Text=”“),则
cmd.Parameters(“@Date”).Value=sqldatenull

0000不是有效的年份;首先,我将重新审视输入表单的需求,以确定哪些是可选的,哪些是可能的添加验证

如果只有年份是可选的,那么您可以简单地将0001存储为年份

dt = new DateTime(Math.Max(1,dob_year), dob_month, dob_day);

如果日期和/或月份是可选的,则DateTime不是正确的数据类型,因为您无法存储空值,因此只有为day、month、year设置单独的字段才是唯一的选项。

日期始终需要一天、一个月和一年,因为它指的是过去、现在或将来的实际日期

所有日期必须在01/01/0001到31/12/9999之间,因此无法存储0000年

对于您的问题,有两种选择:

  • 将日期、月份和年份存储在三个单独的字段中
  • 以通常的方式存储日期,将日期的未指定部分设置为某些默认值。然后使用第二个带tinyint的字段存储三位标志,这些标志告诉您日期的哪些部分有效,哪些部分无效

为什么允许用户不选择年份,或至少选择0000年?我无法更改数据库结构。只有日期字段。在前端我有三个下拉列表。用户可以选择一个、两个或全部三个下拉列表。但是,如果用户没有选择任何一个字段,我很难在db中插入值。如何将其插入日期field@asifa:很明显,这是由数据组成的。任何日期都必须有年、月、日,所以使用(比如)2000年1月1日作为“模板”值。如果不包括年份,则使用2000。如果不包括月份,则使用一月。如果不包括一个月中的某一天,请使用1。当然,您正在丢失有关“用户实际输入的内容”的信息,但这在您的模式中是一个失败。您非常正确,但您能否告诉我要在db中设置的默认日期,如您所说的1月1日,但如果用户实际选择1月1日,则会出现问题。你能推荐一个默认的日期模板吗。非常感谢你的支持efforts@asifa:“会有问题”太含糊了,无法真正给你任何有用的反馈。如果用户可以选择年份,那么你就不能真正选择一个用户永远不会选择的有效日期。毕竟,如果我只指定“1976”,你怎么可能在1976年选择一个不能手动输入的日期?正如我所说的,对于需要保留的信息,您的模式基本上是不完整的。