2009-08-15 90 views
0

我想一些日期添加到一些asp.net成員關係的字段(LastLoginDate,LastPasswordChangedDate等)將DateTime轉換爲適用於SQL Server的DateTime?

所以我所做的就是

DateTime sendDate = new DateTime(1754, 1, 1, 12, 0, 0); 

然後我累了使用LINQ to SQL和添加他們。

它回來了異常

"SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM." 

我不知道如何將它轉換成的東西,將被允許進入。

DateTime dateFields = new DateTime(1800, 1, 1, 12, 0, 0); 
aspnet_Membership membership = new aspnet_Membership(); 
       membership.ApplicationId = applicationId; 
       membership.UserId = userId; 
       membership.Password = password; 
       membership.PasswordFormat = passwordFormat; 
       membership.PasswordSalt = base64Salt; 
       membership.MobilePIN = null; 
       membership.Email = email; 
       membership.LoweredEmail = email.ToLower(); 
       membership.PasswordQuestion = null; 
       membership.PasswordAnswer = null; 
       membership.IsApproved = isApproved; 
       membership.IsLockedOut = false; 
       membership.CreateDate = dateCreated; 
       membership.LastLoginDate = dateFields; 
       membership.LastPasswordChangedDate = dateFields; 
       membership.LastLoginDate = dateFields; 
       membership.FailedPasswordAttemptWindowStart = dateFields; 
       membership.FailedPasswordAnswerAttemptCount = 0; 
       membership.FailedPasswordAnswerAttemptWindowStart = dateFields; 
       membership.FailedPasswordAnswerAttemptCount = 0; 
       membership.Comment = null; 


       // from asp.net mvc unleashed book. 
       GenericRepository.Create<aspnet_Membership>(membership); 

回答

1

你在哪裏從c#中獲得「dateCreated」?它有什麼價值?

而你沒有設置「LastLockoutDate」......你實際上有兩次「LastLoginDate」。 LastLockoutDate設置了哪些值?

它看起來像「dateFields」是在SQL Server的術語日期時間(這是使用aspnet_Membership)正確,也許是錯誤來自其他地方......

+0

謝謝我確定我擁有所有正確的領域,但他們的太多「拉」,我一直認爲我有他們所有。那就是我想念的。 「LastLockOutDate」。 我和你一樣可以將這些東西作爲參數或linq中的某些東西傳遞給sql,然後必須通過屬性來完成。當你必須添加大量具有相似名稱的屬性時,會變得很混亂。 – chobo2 2009-08-15 18:01:20

0

也許你在錯誤的順序發送它。

你的SQL子句是什麼樣的?如果你只是設置一個SqlParameter(你應該是這樣),假設DateTime的參數設置正確,生活應該是相當不錯的。

+0

好吧,我張貼我有什麼。 – chobo2 2009-08-15 06:58:54

+0

那很奇怪。 我會看看你是否可以找出MemberhipProvider實際執行的SQL查詢。對不起,我不能更有幫助。 我不知道DateTime構造函數關閉我的頭頂,所以確保你傳遞正確的參數給它;也許它並沒有讓你認爲它正在創造。 – 2009-08-15 07:01:58

+0

我很確定我有正確的參數,並不確定MembershipProvider與它有什麼關係。我沒有使用任何成員資格方法。這就像使用我自己的查詢將某些東西插入到恰好是成員資格表的表中。 – chobo2 2009-08-15 07:09:56

2

也許還有一個DateTime字段,你還沒有填寫?在這種情況下,它將默認爲01/01/0001,這不在SQL Server的DATETIME範圍內。

如果你是SQL Server 2008上,你可以避開這個可以使用DATETIME2型 - 這有通過12/31/9999

的01/01/0001有效日期範圍馬克

+0

不,我不使用VS2008,我想我擁有他們。 – chobo2 2009-08-15 07:17:20

+0

我試過把Date.Now也一樣。有人可以看到我是否缺少一個或發生了什麼? – chobo2 2009-08-15 07:27:42

+0

** SQL Server 2008 ** - 不是VS2008!另外,你是否可能創建一個可能包含DateTime字段的關聯對象? – 2009-08-15 08:23:51

0
  1. 檢查是否允許空值的日期時間列。
  2. 另請檢查SQL 服務器上的語言環境/日期格式。這可能只是期望天, 一個月或一年中不同的順序(例如,米/ d/Y VS DD/MM/YYY)
0

嘗試使用此功能與轉換。

public static string GetDateTimeSQLString(DateTime SomeTime) 
{ 
    //yyyy-MM-dd HH:mm:ss 
    string SqlTime = SomeTime.Year.ToString() + "-" + SomeTime.Month.ToString() + "-" + SomeTime.Day.ToString() + " " + SomeTime.Hour.ToString() + ":" + SomeTime.Minute + ":" + SomeTime.Second.ToString(); 
    return SqlTime; 
}