如何使用Datetime存储BIGINT数据类型作为会话id.蜱虫c#



我试图将当前datetimeticks的完整值存储到bigint SQL数据类型作为会话ID。但是无法成功转换数据类型。

我的目标是在c#中获得当前的Datetime.Ticks,并将其存储为SQL Server中的SessionId。(version 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 (-9223372036854775808) 2 ^ 63 - 1 (9223372036854775807)

c# (system . numeric)中

BigInteger没有上界或下界

请提供替代建议/修复此错误,因为我的目标是将完整的datetimeticks存储为SessionId

使用。net BigInteger是不必要的。根据SQL Server映射,long映射到BIGINT

long sessionId = DateTime.Now.Ticks

你现在必须能够存储sessionId的值来代替[session_Id] BIGINT NOTNULL

首先,转换BigInteger是多余的,因为long (Int64)在SQL Server中意味着BIGINT。其次,只要数据类型是long,就可以简单地将sessionId值设置为Ticks。你基本上是在无缘无故地将同一个类型强制转换两次。

//Timespan.Ticks is a long data type.
long sessionId = DateTime.Now.Ticks;

最新更新