Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用nHibernate存储128位整数?_C#_Sql_Nhibernate_Firebird - Fatal编程技术网

C# 如何使用nHibernate存储128位整数?

C# 如何使用nHibernate存储128位整数?,c#,sql,nhibernate,firebird,C#,Sql,Nhibernate,Firebird,问题: 如何使用nHibernate存储128位整数(IPv6) 特别是在Firebird上,其中BigInteger的最大大小为2^64 我想做如下计算: SELECT * FROM T_Country_IP_Range WHERE (block_from <= @in_IP) AND (block_to >= @in_ip) 从国家/地区/IP范围中选择* 哪里 (block_from=@in_ip) 因此,将其存储为text/varchar/char不是一个选项。看起

问题:

如何使用nHibernate存储128位整数(IPv6)

特别是在Firebird上,其中BigInteger的最大大小为2^64

我想做如下计算:

SELECT * FROM T_Country_IP_Range 
WHERE 
(block_from <= @in_IP) 
AND (block_to >= @in_ip)
从国家/地区/IP范围中选择*
哪里
(block_from=@in_ip)

因此,将其存储为text/varchar/char不是一个选项。

看起来确实没有firebird对INT128的支持

您可以将128位表示为两个64位字段,一个字段中的高64位(
IP\u-upper
),另一个字段中的低64位(
IP\u-lower

所有比较操作都必须比较两个字段。如果上字段较小/较大或相等,则检查下字段:

SELECT * FROM T_Country_IP_Range 
WHERE 
(
    block_from_upper < @in_IP_upper 
    OR 
    (block_from_upper = @in_IP_upper AND block_from_lower <= @in_IP_lower)
) 
AND 
(
    block_to_upper > @in_IP_upper 
    OR 
    (block_to_upper = @in_IP_upper AND block_to_lower >= @in_IP_lower)
)
从国家/地区/IP范围中选择*
哪里
(
阻止来自上止点的上止点<@in上止点
或
(来自上层的块=@in\u IP\u上层和来自下层的块=@in\u IP\u上层
或
(区块至区块上部=@in区块上部和区块至区块下部>=@in区块下部)
)

有点尴尬,毫无疑问,

二进制字段是一个选项吗?然后你可以解析并使用
IPAddress.GetAddressBytes
GUID?它们是128位,应该由NHibernate和T-SQL支持。@xanatos:一个整数,用于比较,而不仅仅是一个随机数。另外,我说的是Firebird,它不是T-SQL,但因为NHibernate支持rts T-SQL,它也应该在那里工作。@在T-SQL中,用户可以“选择”唯一标识符,但阅读Firebird网站,Firebird似乎不支持它。我将在您的问题中添加Firebird标记。