gpt4 book ai didi

c# - 存储/检索位 C# 的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:18 25 4
gpt4 key购买 nike

<分区>

我正在修改现有的 C# 解决方案,其中数据经过验证,状态存储如下:

a) 给定的记录根据特定的编号进行验证。条件(比如 5)。失败/通过状态由位值表示(0 - 通过;1 - 失败)b) 因此,如果记录的所有 5 次验证均失败,则值将为 11111。这将被转换为十进制并存储在数据库中。

此十进制值将再次转换回二进制(使用按位 & 运算符),用于显示通过/失败的记录。

问题是,在 C# 中使用长数据类型来处理小数,而在 SQL Server 2008 中使用“小数”数据类型来存储此小数值。最大。 long 转换为二进制的值最多只能容纳 64 位,因此验证计数目前限制为 64。

我的要求是取消此限制以允许任何否。验证。

我如何存储一个大号。位并检索它们?另外,请记住,这是一个现有的 (.NET 2.0) 解决方案,无法升级/使用任何第 3 方库,并且更改必须最少

最新更新

是的,从应用程序的角度来看,这个解决方案似乎没问题,也就是说,如果我(也就是当前的解决方案)只使用 C#。然而,现有解决方案的设计者通过将二进制值(11111 表示所有 5 条记录都失败,10111 - 除了第 4 条记录之外的所有记录都失败,依此类推...)在 SQL Server 数据库中转换为十进制值,从而使事情变得复杂。 SP 使用此值得出 no。每次验证失败的记录数。

OPEN sValidateCUR                        
FETCH NEXT FROM sValidateCUR INTO @ValidationOID,@ValidationBit, @ValidationType
WHILE @@FETCH_STATUS = 0
BEGIN
-- Fetch the Error Record Count
SET @nBitVal = ABS(RPT.fGetPowerValue(@ValidationBit)) -- Validation bit is no. of a type of validation, say, e.g. 60. So 1st time when loop run, ValidationBit will be 0
select @ErrorRecordCount = COUNT(1) FROM
<<Error_Table_Where_Flags_are availble in decimal values>>
WITH(NOLOCK) WHERE ExpressionValidationFlags & CAST(CAST(@nBitVal AS VARCHAR(20)) AS Bigint) = CAST(@nBitVal AS VARCHAR(20)) -- For @ValidationBit = 3, @nBitVal = 2^3 = 8

现在,在应用程序中,使用 BitArray,我设法将通过/失败的记录存储在 BitArray 中,将其转换为 byte[] 并作为 VARBINARY(100)... 存储在 SQL Server 中(同一列 ExpressionValidationFlags,它是早期的 BIGINT,现在是 VARBINARY 并保存字节数组)。但是,要完成我的更改,我需要修改上面的 SP。

再次期待帮助!!

谢谢

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com