2012-08-09 150 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