2012-08-09 129 views
0

我在我的项目.NET中使用EF 4(model first),我在DateTime字段中遇到了麻烦。DateTime2让我疯狂

当我将使用SaveChanges()此抛出异常:

System.Data.SqlClient.SqlException:一个DATETIME2数据类型为datetime数据类型的转换导致的外的范围值。

我试着使用:

System.Globalization.CultureInfo enGB = new System.Globalization.CultureInfo("en-GB"); 

,但没有新的情况发生。如果我今晚没有修好它,我会爆炸我的电脑。

我需要帮助,我不希望发生爆炸我的电脑=(1周试图解决它没有成功

这里是我的代码:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
     int id = Convert.ToInt32(Request.QueryString["id"]); 
     ModeloContainer ctx = new ModeloContainer(); 
     Cliente cli = ctx.Cliente.Where(cl => cl.IdCliente == id).First(); 
     Contrato c = new Contrato(); 

     c.Descricao = this.txtDescricao.Text; 
     c.FaturarPara = this.ddlFaturarPara.SelectedValue; 
     c.Tolerancia = Convert.ToInt32(this.txtSuspenderContratoEm.Text); 
     c.PeriodoPagto = this.ddlPeriodoPagamento.SelectedValue; 

     // DateTime dtExpiracao = this.txtExpiraEm.Text.Trim() == "" ?                  Convert.ToDateTime("01/01/0001") : Convert.ToDateTime(this.txtExpiraEm.Text.Trim()); 
     DateTime dt = DateTime.Now; 
     System.Globalization.CultureInfo enGB = new System.Globalization.CultureInfo("en-GB"); 
     dt = Convert.ToDateTime(dt, enGB); 

     c.ExpiraEm = dt; //Here is the problem! but I no have idea how fix it 

     ctx.AddToContrato(c); 
     ctx.SaveChanges(); 
     this.SalvarServiços(c.IdContrato); 
} 

我知道,有这样的这么多问题在这里,但他们没有解决我的问题

我想在文本框中插入日期是这样的:09/08/2012

+0

尝试[这篇文章](http://stackoverflow.com/questions/4259716/datetime2-conversion-in-ef4)如果没有帮助你,你可以发布你的模型/ – 2012-08-09 20:51:32

+3

是否有任何其他非 - 您实体中的可为空的'DateTime'字段?如果是的话,这是您的问题的来源,因为EF正在向该列发送1/1/0001。您还可以使用SQL分析器来检查EF试图保存到数据库的值。 – 2012-08-09 21:35:38

回答

2

我不认为有任何问题与您的ExpiraEm列。

我怀疑你有另一个(或多于一个)datetime字段是不可空的,因为你没有为它们提供任何值,所以EF将为它们传递01/01/0001,这是不可接受的SQL服务器(SQL Server的最低可接受日期是1753年1月1日)。所以你得到这个SQL异常。

类似情况已遇到herehere