Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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/25.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/4/webpack/2.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# 如何防止参数被再次使用?_C#_.net_Unique - Fatal编程技术网

C# 如何防止参数被再次使用?

C# 如何防止参数被再次使用?,c#,.net,unique,C#,.net,Unique,在回答这个问题之后: 我意识到GetHashCode的目的不是为对象提供唯一标识符 此测试的目的是让我拥有一个具有6个参数的业务函数: 客户号 服务ID 起始日期 结束日期 肌酸 我不想用相同的值多次调用这个函数 这些参数被插入到数据库中,我可以用customerId=@customerId和serviceId=@serviceId…,进行查询,但我需要大量的组合来提高效率,所以这不是一个解决方案 编辑: 例如: 假设我有一个超级用户,他需要注册客户。注册由5个参数组成:customerId、s

在回答这个问题之后:

我意识到GetHashCode的目的不是为对象提供唯一标识符

此测试的目的是让我拥有一个具有6个参数的业务函数:

客户号 服务ID 起始日期 结束日期 肌酸 我不想用相同的值多次调用这个函数

这些参数被插入到数据库中,我可以用customerId=@customerId和serviceId=@serviceId…,进行查询,但我需要大量的组合来提高效率,所以这不是一个解决方案

编辑:

例如:

假设我有一个超级用户,他需要注册客户。注册由5个参数组成:customerId、serviceId、startDate、EndDate、cmsMatiCID。注册过程如下:

您可以使用一个大的红色按钮选择服务,例如show hi 您可以选择购买服务的客户 如果需要,您可以在网页上选择CMS脚本 您可以在下拉列表中选择开始日期 您可以在下拉列表中选择结束日期 我的表单无法显示已使用的一组参数

例如,一旦customer 1注册了1月份纽约假日页面上的服务大红色按钮,超级用户就不会在表单中看到这些参数集

所以我的过程是这样的: -创造一切可能 -计算列表中每个可能性的哈希代码 -从数据库中获取每个已使用可能性的哈希代码 -从列表中删除已使用的可能性 -显示表单

问题是:哈希代码不是唯一的,所以我可能会删除一个项目,即使它没有被使用


是否更清晰?

每次调用后,将6个值存储在具有合成索引的历史记录表中。 在您的业务功能中,我将添加一个代码来验证这些值是否已经在您的历史记录表中,如果我找到了这些值,则立即退出

稍后编辑: 以下是查询历史记录表的方式:

IF EXISTS
  (SELECT customerId FROM HIstory WITH (NOLOCK) WHERE customerId='<value>' AND serviceId='<value>' AND <add all your fields here>)
    SELECT 1
ELSE
    SELECT 0
这样,如果已经有一条记录意味着您的业务函数已经被您正在测试的参数调用,那么上面的查询将返回1,否则返回0

所以如果1,你需要停下来

如果为0,则需要将值添加到历史记录表并执行业务逻辑。或者:执行业务逻辑,然后将值添加到历史记录表中

编辑2: 最初,您的历史记录表是空的。对函数的每次调用都将:

在Hitory表中查询与作为参数传递给函数的值相匹配的现有值

如果需要,填充历史记录表

也就是说,函数要做的第一件事是查询历史记录表,如果需要,在该表中插入一组新值。
基本上,每次调用所实现的函数时都会执行查询,因为查询是在该函数内部完成的。

不清楚您的意思。如果将它们插入到数据库中,并且对数据库或索引施加唯一性约束并执行查询,则应该可以。你说我需要大量的组合来提高效率是什么意思?我正在构建一个表单来显示所有的参数组合,但我无法显示已经使用的参数,因此必须在插入之前进行计算。为什么不能在插入之前进行查询?或者尝试插入并处理唯一的约束冲突?我可能会在表单中显示2000个不同的参数组合,因此无法在5个字段上运行2000查询筛选。第二个问题:我不想让我的用户尝试很多组合,说不可能,尝试其他的东西。第二个问题:我不想让我的用户尝试很多组合,说不可能,尝试其他的东西-我不确定这是否可能;如果不检查并向用户报告,您如何知道它们不是唯一的?这里的问题是,我可能有2000个值,其中有5个字段是日期,因此即使有索引,这也可能很长。无论如何,您低估了sql server和索引的功能:这实际上是一个很低的数字,相信me2000实际上是下限,为了获得我的双hascodes,我必须构建31110个组合。您将如何在sql中查询数据库?否,使用IF exist:IF EXISTS使用NOLOCK从历史记录中选择customerId,其中customerId=和serviceId=和。。。。我的解决方案只是为了解决你未来的问题,而不是你过去的糟糕设计,对不起。不幸的是,从散列值中,您无法判断产生这些散列的实际值是什么,因此我的解决方案是更改您迄今为止所做的一切,并将其替换为此历史表。