如何在c#中將datetime轉換爲smalldatetime?我正在將日期和ı需要將其轉換爲與數據庫一致。禁止在sql中更改列的數據類型。在c中將DateTime轉換爲SmallDateTime#
回答
您可以對實體框架模型使用.NET DateTime類型,但告訴EF它在數據庫中使用非默認列類型。您可以通過重寫你的DbContext的OnModelCreating方法,以及使用HasColumnType方法做到這一點:
public class Foo
{
public int Id { get; set; }
public DateTime IAmSoSmall { get; set; } // wants to be smalldatetime in SQL
}
public class MyContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var foo = modelBuilder.Entity<Foo>();
foo.Property(f => f.IAmSoSmall).HasColumnType("smalldatetime");
base.OnModelCreating(modelBuilder);
}
}
當然,你必須做你的DateTime屬性合適的範圍檢查,以確保存儲值落在SQL smalldatetime支持的值之間。我想你可以做到這一點與屬性的屬性,如:
[Range(typeof(DateTime), "1/1/1900", "6/6/2079")]
public DateTime IAmSoSmall { get; set; } // wants to be smalldatetime in SQL
...基於自1900年1月1日,到2079年6月6的有效範圍,在MSDN上的記錄。
您也可以使用數據註釋'[Column(TypeName =「smalldatetime」)]'更改列類型。見http://stackoverflow.com/a/4833477/1180926 – Arithmomaniac
@Arithmomaniac是的,它看起來像EF 4.3.1列類型數據註釋的作品。尼斯。 –
也許你可以這樣做YourDateTime.Date
通常情況下,當你這樣做的方式,它會設置時間爲00:00:00。
'smalldatetime' *可以*表示一個時間組件。請參閱[文檔](http://msdn.microsoft.com/en-us/library/ms182418.aspx) –
Sql Server的datetime
和smalldatetime
都是自動映射到從CLR的System.DateTime
。 A smalldatetime
具有1分鐘的精確度;一個datetime
的精度約爲1/300秒(不要問爲什麼,它只是)。由於CLR的System.DateTime1
具有100納秒的精度,因此運行時會考慮舍入。
smalldatetime
內部是一個32位的整數,包含自smalldatetime
曆元(1900-01-01 00:00)分鐘的計數。在轉換中,秒和小數秒是使用SQL Server的神祕日期/時間舍入規則舍入的,所以日期2013-01-31 23:59:59四捨五入到下一個日期2013- 02-01 00: 00:00'。
datetime
內部是一對32位整數。高階詞是自紀元以來的天數;低位字是從開始日(00:00:00)開始計數的毫秒數。datetime
的時代爲1900-01-01 00:00:00.000。而且,同樣神祕的方式在轉換中將值舍入爲四捨五入,並且將固定秒數置於SQL Server的適當毫秒桶之一中,爲3ms的倍數—沒有像2013年那樣的SQL Server`日期時間值-05-01 13:57:23.004。這將被「舍入」爲23.003ms或23.006ms。
如果你想更多地控制事情,你需要在C#中調整你的日期時間值,然後將它們發送到數據庫。
Eh? SQL Server以無明顯原因以0.000,0.003或0.007秒爲增量計算時間。自從Sybase時代以來,它一直都是。即使如此,在Windows NT下,BIOS和WinNT系統時鐘都具有分辨率c。 10毫秒。 Sybase必須使用CMOS「實時」時鐘實現自己的時間實現,繞過BIOS。這個芯片在32.768 kHz這樣的東西上打勾,使得二進制算術變得容易。爲什麼他們會將這個問題敲入不規則大小的桶中,這些桶與十進制值或二進制表示形式不匹配。我確信當時對某人有意義。 –
我完全誤讀了第一次,如果你是說有沒有合理性datetime'的'不同的精度和'smalldatetime',不要再追上的事實,你paranthetical提到的任意1/300 S的'精度datetime'。現在大膽地刪除我誤導的評論。 – jball
- 1. 將varchar列轉換爲smalldatetime
- 2. 在sql server中將nvarchar轉換爲smalldatetime
- 3. 將數據類型datetime轉換爲smalldatetime的SQL錯誤?
- 4. 將datetime js轉換爲c#
- 5. 將Timespan轉換爲C中的DateTime#
- 6. 將SYSTEMTIME(Native C++)轉換爲DateTime(C#)
- 7. 將字符串轉換爲smalldatetime
- 8. DATETIME2轉換爲smalldatetime觸發
- 9. smalldatetime轉換
- 10. 將DateTime轉換爲DateTime?在asp.net
- 11. datetime vs smalldatetime
- 12. C#將UTC int轉換爲DateTime對象
- 13. 將javascript gettime()轉換爲c#datetime
- 14. 將字符串轉換爲DateTime C#ASP.NET
- 15. 將C#DateTime轉換爲輸入到數據庫中的SQL DateTime
- 16. 在tsql中將varchar轉換爲datetime
- 17. 在SQL Server中將varchar轉換爲datetime
- 18. 在SQL Server中將varchar轉換爲datetime
- 19. 在sql server中將datetime轉換爲yyyymmddhhmmss
- 20. 在T-SQL中將DateTime轉換爲yyyyMMddHHmm
- 21. 將DateTime + TimeZone轉換爲UTC
- 22. 將sting轉換爲datetime python
- 23. SQL - 將varchar轉換爲datetime
- 24. 將varchar轉換爲datetime
- 25. 將DateTime轉換爲毫秒
- 26. Typescript將sting轉換爲datetime
- 27. 將nvarchar轉換爲datetime
- 28. SQL將INT轉換爲datetime
- 29. 將lastlogontimestamp轉換爲DateTime
- 30. SQL將'DDMMYY'轉換爲datetime
相關:http://stackoverflow.com/questions/14124887/datetime-from-net-to-smalldatetime-in-sql-how-to-do-queries –
請告訴我們相關的代碼。你說你在轉換,但你的意思是在一個where子句中嗎?在您的實體反序列化?還有別的嗎? –
而且由於這是下變換,所以您最好從解釋smalldatetime邊界邊緣的值中解釋您想要的內容。 – DonBoitnott