Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# net中的校验和对应项_C#_.net_Sql Server_Performance_Checksum - Fatal编程技术网

C# net中的校验和对应项

C# net中的校验和对应项,c#,.net,sql-server,performance,checksum,C#,.net,Sql Server,Performance,Checksum,我想在C#中获得一个hashbytes/checksum函数,它与SQL Server完全一样。我们的SPA正在向后端发布大量数据,我想在插入之前检查数据库中是否存在重复数据。尽管最好的方法是为我要插入的值计算一个哈希/校验和,并在where子句中使用这些值。唯一行是使用列组合的标识符 where hashbytes('sha1', a+b+c) in ( 0x40BD001563085FC35165329EA1FF5C5ECBDBBEEF ,0x5F6955D227A320C7F1F6C7DA

我想在C#中获得一个hashbytes/checksum函数,它与SQL Server完全一样。我们的SPA正在向后端发布大量数据,我想在插入之前检查数据库中是否存在重复数据。尽管最好的方法是为我要插入的值计算一个哈希/校验和,并在where子句中使用这些值。唯一行是使用列组合的标识符

where hashbytes('sha1', a+b+c) in (
0x40BD001563085FC35165329EA1FF5C5ECBDBBEEF
,0x5F6955D227A320C7F1F6C7DA2A6D96A851A8118F
,0x91DFDE1D6E005E422F64A59776234F1F4C80B5E4
,0x19187DC98DCE52FA4C4E8E05B341A9B77A51FD26
,0xEADC1DD8FC279583D5552700AE5D248E3FA123BD
,0xA93C168323147D1135503939396CAC628DC194C5)
当然,我可以构建一个非常具体的where子句来检查重复项,但我认为这会更快。我已经在堆栈上看到了许多关于这个的线程,但我正在绞尽脑汁研究如何做到这一点

select a,b,c, CHECKSUM(a,b,c) _checkSum,hashbytes('sha1', a+b+c) _hash
from (
select '1' as a, '2' as b, '3' as c, 4 as d
union all
select '3' as a, '2' as b, '1' as c, 4 as d
union all
select '1' as a, '3' as b, '2' as c, 4 as d
union all
select '2' as a, '1' as b, '3' as c, 4 as d
union all
select '2' as a, '3' as b, '1' as c, 4 as d
union all
select '3' as a, '1' as b, '2' as c, 4 as d
) tbl

在我的c#应用程序中,我可以在数据表或字符串数组中获得可用的数据。即

var data = new string[] {"1", "2", "3"};

问题是如何将上面的数据字符串数组转换为校验和/哈希

可能的副本。更重要的问题是,你们为什么需要这样做?需要这样做很奇怪,尤其是客户端。HASHBYTES使用标准哈希实现。您可以随时将值反弹到服务器并让它为您执行。正如Alex所说,您最好使用标准校验和,如SHA1到HASHBYTES,因为有现成的.net实现。这是后端。请检查我编辑的问题。
其中一组行上的hashbytes('sha1',a+b+c)
在SQL中是一种效率极低的构造(不是可搜索的、昂贵的函数、串联),
其中a=x和b=y…
使用适当的索引要好得多。也可以考虑使用<代码> Hash Bys<代码>,对于<代码> '1' + ' 2′+' 3′/代码>产生相同的哈希值,对于<代码> '1'+'′+' 23′<代码>可能的副本。更重要的问题是,你们为什么需要这样做?需要这样做很奇怪,尤其是客户端。HASHBYTES使用标准哈希实现。您可以随时将值反弹到服务器并让它为您执行。正如Alex所说,您最好使用标准校验和,如SHA1到HASHBYTES,因为有现成的.net实现。这是后端。请检查我编辑的问题。
其中一组行上的hashbytes('sha1',a+b+c)
在SQL中是一种效率极低的构造(不是可搜索的、昂贵的函数、串联),
其中a=x和b=y…
使用适当的索引要好得多。也可以考虑使用<代码> hash Bys<代码>,对于<代码> '1' + ' 2′+' 3′/代码>产生相同的哈希值,对于<代码> '1'+'′+' 23′<代码>