2016-07-02 26 views
0

我試圖將當前日期的datetimeticks的全部值存儲爲bigint SQL數據類型作爲會話ID。但無法成功轉換數據類型。如何使用Datetime.Ticks作爲會話ID存儲BIGINT數據類型C#

我的目標是獲得當前Datetime.Ticks在C#中,並將其保存爲SessionId在SQL Server(2008版R2)

在SQL Server中,我申報的SessionID爲bigint如下:

[Session_Id] [bigint] NOT NULL 

在C#(WinForm的),我目前使用這個(做工精細):

long sessionId; 
sessionId = Convert.ToInt64((long)BigInteger.Divide(DateTime.Now.Ticks,(BigInteger)5445654850112.1245)); 

我試圖在不截斷BigInteger中的值的情況下使用它,但會引發錯誤。

BigInteger sessionId = DateTime.Now.Ticks; 

快照的我是說我用上面的代碼錯誤是:

BigInteger_Error

我也試圖轉換爲下面的Int64但同樣的錯誤仍然存​​在。

BigInteger sessionId = Convert.ToInt64(DateTime.Now.Ticks); 

作爲每MSDN源,在SQL Server的BIGINT大小爲8字節

-2^63(-9,223,372,036,854,775,808)至2^63-1(9,223,372,036,854,775,807)

And BigInteger in C#(System.Numerics)沒有上限或下限

請提供可供選擇的建議/修復這個錯誤是我的目標是存儲完整datetimeticks作爲SessionId

+1

爲什麼在SQL'BIGINT'等於'long' /'System.Int64'時使用'System.Numerics.BigInteger'? – yaakov

+1

使用.Net'BigInteger'是不必要的。你可以簡單地保存「長」。 – pijemcolu

回答

1

使用.NET的BigInteger是不必要的。按照SQL Server mappinglong映射到BIGINT

long sessionId = DateTime.Now.Ticks 

你必須現在能夠存儲代替[session_Id] BIGINT NOTNULL

+0

糟糕。簡單的邏輯。謝謝你讓我注意到這一點。 – Muruga

1

首先的sessionId價值,鑄造BigInteger的是多餘的,因爲long (Int64)意味着在SQL Server BIGINT。其次,只要數據類型很長,您可以簡單地將您的sessionId值設置爲您的Ticks。你基本上無緣無故地投了兩次相同的類型。

//Timespan.Ticks is a long data type. 
long sessionId = DateTime.Now.Ticks; 
相關問題