我知道在StackOverflow上已经多次询问过这个问题,但是没有一个答案似乎适合我的情况,或者他们只是告诉他们在DateTime中允许NULL字段(我不想这样做)做)。
以下是代码:
public async Task<int> CreateJobAsync(JobViewModel jvm)
{
Job j = new Job();
j.Name = jvm.Name;
j.UserId = jvm.UserId;
j.ClassDefinition = jvm.ClassDefinition;
j.DaysToRun = jvm.DaysToRun;
j.ToEmail = jvm.ToEmail;
j.Active = true;
j.CreatedDate = DateTime.Now;
j.ModifiedDate = DateTime.Now;
context.Jobs.Add(j);
var result = await context.SaveChangesAsync();
return result;
}
Job
类中的所有字段都是DateTime
,数据库中的对象也是NULL
。日期值不是await
。当我运行 Sql Profiler 时,它甚至不显示已进行数据库调用。
not null
来电时出现错误,它是:
将datetime2数据类型转换为日期时间数据类型会导致超出范围的值
这似乎是一个相当简单的例子,我确实需要这些值为 protected void RETRIEVE_BUTTON_Click(object sender, EventArgs e)
{
AjaxControlToolkit.TabContainer container = new AjaxControlToolkit.TabContainer();
container.ID = DateTime.Now.Millisecond.ToString();
container.EnableViewState = false;
container.Tabs.Clear();
container.Height = Unit.Pixel(500);
container.Width = Unit.Pixel(1200);
container.Tabs.AddAt(0, GetManualTab());
foreach (ListItem item in SelectionListBox.Items)
{
if (item.Selected)
{
Label tabContent = new Label();
tabContent.ID = "lbl_tab_";
tabContent.Text += item.Value;
AjaxControlToolkit.TabPanel panel = new AjaxControlToolkit.TabPanel();
panel.HeaderText += item.Value;
container.Tabs.Add(panel);
panel.Controls.Add(tabContent);
if (string.Compare(item.Value,"item 1",true) == 0)
{
ChartArea mainArea;
Chart mainChart;
Series mainSeries;
mainChart = new Chart();
mainSeries = new Series("MainSeries");
mainSeries.Points.AddXY(1, 1);
mainSeries.Points.AddXY(2, 2);
mainSeries.Points.AddXY(3, 3);
mainSeries.Points.AddXY(4, 4);
mainChart.Series.Add(mainSeries);
mainArea = new ChartArea("MainArea");
mainChart.ChartAreas.Add(mainArea);
panel.Controls.Add(mainChart);
}
if (string.Compare(item.Value,"item 2",true) == 0)
{
ChartArea mainArea;
Chart mainChart;
Series mainSeries;
mainChart = new Chart();
mainSeries = new Series("MainSeries");
mainSeries.Points.AddXY(2, 4);
mainSeries.Points.AddXY(3, 6);
mainSeries.Points.AddXY(4, 8);
mainSeries.Points.AddXY(6, 1);
mainChart.Series.Add(mainSeries);
mainArea = new ChartArea("MainArea");
mainChart.ChartAreas.Add(mainArea);
panel.Controls.Add(mainChart);
}
}
}
PlaceHolder1.Controls.Add(container);
}
。任何其他想法???
答案 0 :(得分:2)
DateTime是.Net中的值类型,永远不会为null。
现在,据说,DateTime的默认值是DateTime.MinValue
中的C#
,等于01/01/0001
,默认情况下所有DateTime字段都会获得此值,除非另有说明!但是,此日期超出SQLServer
日期范围,最短日期为1/1/1753
。可能这就是你得到这个例外的原因。
使代码可用的一种方法是使用SqlDateTime.MinValue而不是DateTime.MinValue。
答案 1 :(得分:2)
Job
中的其他字段必须在代码中未设置类型DateTime
。此未设置属性将默认为DateTime.MinValue
,即1-Jan-0001。 SQL类型DATETIME仅支持年份大于1752的日期。因此,您的例外原因。
最简单的解决方案是将数据库更改为使用DATETIME2而不是DATETIME。另请参阅DateTime2 vs DateTime in SQL Server