.Net到SQL,比较唯一值的最佳方法

时间:2011-01-20 12:29:55

标签: c# .net sql

我有一个导入过程,我在.Net中获取一个CSV文件,并在DataBase中写入两个用户表。这是一个非常复杂的过程,需要花费几分钟来处理大约500个用户。 在这个过程中,我需要生成一个字符串,随机字符串,对每个用户都是唯一的,因为它可以让他访问一些促销。我不能使用GUID,因为它必须是一个简单的字符串,供用户在启动画面中输入。 我需要知道的是,检查每个新生成的密钥是否不重复已在数千个预先存在的用户中创建的密钥的最佳方法是什么。 我不想在每个插入的行中添加一个新查询,询问该字符串是否已存在。

谢谢,我希望我很清楚

3 个答案:

答案 0 :(得分:2)

与可能的唯一键数相比,有多少用户?

如果有更多可能的键而不是用户,那么我只需在键列上添加一个唯一约束,并在遇到约束违规时生成一个新键。

如果您可能与上述技术发生很多冲突,那么您可以选择以下几种方式:

  • 预先生成一组唯一键,将它们存储在某个表中并在需要时将其存储。
  • 为密钥添加一些唯一性:用户是否具有可以合并的唯一ID?

答案 1 :(得分:1)

您可以在密钥值中将字符串存储在Dictionary中。如果字符串重复,那么它将生成错误,在这里你可以处理错误并为用户生成新的字符串。

希望它对你有所帮助。

答案 2 :(得分:1)

一种简单的方法可以是为客户使用部分MD5 +以十六进制编码的customerid。

customerid部分确保唯一性,MD5部分确保您无法猜测其他用户密钥。

根据您可以处理的短字符串的数量,您可以只使用MD5中的前6-10个字符,如果您需要缩短它,请使用比Hex更紧凑的内容进行重新编码,例如base-64或者如果您处理不同的话case做你自己的选择,AZ + 0-9,也许是一些特殊的字符,得到2的指数很容易映射到十六进制。