在 SQL 服务器中解析日期时出现 SqlDateTime 溢出错误
SqlDateTime overflow error with parsing Date in SQL Server
我正在尝试将日期从 C# 保存到 SQL 服务器。首先要将日期格式显示为 dd/MM/yyyy 给用户。然后在 Winforms 屏幕上选择日期后。我想将它保存到数据库中。如果我删除代码中的 datetimePicker1.CustomFormat
行,它可以很好地保存到数据库中。但我想将日期格式显示为 dd/MM//yyyy。如何解决?
我收到此错误:
SqlDateTime overflow.Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
代码:
//c#
DateTime fromDate;
public void SetMyCustomFormat()
{
// Set the Format type and the CustomFormat string.
//dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "dd/MM/yyyy";
DateTime.TryParse(dateTimePicker1.Text, out fromDate);
fromDate = fromDate.Date;
}
Sql DateTime 和 C# DateTime 类型具有不同的有效日期范围(因此它们不完全兼容)。
Sql日期时间只支持1753年1月1日到9999年12月31日。
问题是您的 TryParse 失败导致 fromDate 为 1/1/0001,Sql DateTime 类型不支持。
在 SQL 中使用 DateTime2 并始终验证解析是否成功。
http://msdn.microsoft.com/en-us/library/ms187819.aspx
http://msdn.microsoft.com/en-us/library/bb677335.aspx
更新:
而您的 TryParse 失败的原因是因为它需要 mm/dd/yyyy 格式。而不是使用 TryParse 使用:
bool success = DateTime.TryParseExact(dateTimePicker1.Text,
"dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out fromDate);
您没有包含关于 SQL 服务器在何处使用此值的任何代码,但是错误可能是由于 D/M/Y
格式造成的。这将导致问题,例如,12 月 31 日,因为它将作为文本 31/12/2014
传递,这通常会在转换为日期时导致问题(取决于区域设置)。
对于您的情况,只需使用 DateTimePicker.Value
property 来提取日期。这将 return 一个 DateTime
类型,因此您不必解析该值。
DateTime fromDate;
public void SetMyCustomFormat()
{
// Set the Format type and the CustomFormat string.
dateTimePicker1.CustomFormat = "dd/MM/yyyy";
fromDate = dateTimePicker1.Value.Date;
}
我正在尝试将日期从 C# 保存到 SQL 服务器。首先要将日期格式显示为 dd/MM/yyyy 给用户。然后在 Winforms 屏幕上选择日期后。我想将它保存到数据库中。如果我删除代码中的 datetimePicker1.CustomFormat
行,它可以很好地保存到数据库中。但我想将日期格式显示为 dd/MM//yyyy。如何解决?
我收到此错误:
SqlDateTime overflow.Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
代码:
//c#
DateTime fromDate;
public void SetMyCustomFormat()
{
// Set the Format type and the CustomFormat string.
//dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "dd/MM/yyyy";
DateTime.TryParse(dateTimePicker1.Text, out fromDate);
fromDate = fromDate.Date;
}
Sql DateTime 和 C# DateTime 类型具有不同的有效日期范围(因此它们不完全兼容)。
Sql日期时间只支持1753年1月1日到9999年12月31日。
问题是您的 TryParse 失败导致 fromDate 为 1/1/0001,Sql DateTime 类型不支持。
在 SQL 中使用 DateTime2 并始终验证解析是否成功。
http://msdn.microsoft.com/en-us/library/ms187819.aspx
http://msdn.microsoft.com/en-us/library/bb677335.aspx
更新:
而您的 TryParse 失败的原因是因为它需要 mm/dd/yyyy 格式。而不是使用 TryParse 使用:
bool success = DateTime.TryParseExact(dateTimePicker1.Text,
"dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out fromDate);
您没有包含关于 SQL 服务器在何处使用此值的任何代码,但是错误可能是由于 D/M/Y
格式造成的。这将导致问题,例如,12 月 31 日,因为它将作为文本 31/12/2014
传递,这通常会在转换为日期时导致问题(取决于区域设置)。
对于您的情况,只需使用 DateTimePicker.Value
property 来提取日期。这将 return 一个 DateTime
类型,因此您不必解析该值。
DateTime fromDate;
public void SetMyCustomFormat()
{
// Set the Format type and the CustomFormat string.
dateTimePicker1.CustomFormat = "dd/MM/yyyy";
fromDate = dateTimePicker1.Value.Date;
}