gpt4 book ai didi

c# - 使用 c# .net 创建数据库列的简单哈希值

转载 作者:行者123 更新时间:2023-11-30 12:35:41 25 4
gpt4 key购买 nike

我想存储一个简单的 n 列哈希值,例如地址和名称,并将散列存储在另一列中。我想通过简单地比较哈希值,将哈希值用作在 2 个源之间同步数据的快速方法。做这样的事情最好的方法是什么。我不需要加密功能来创建哈希。

例如

John Smith, 1 Long Lane Road, Village, Town, 邮政编码。哈希:AK67KS38

我希望散列值足够简单以便于阅读(没有整个范围的 Uni-code 集)。

编辑好的,我仍然想在 c# 代码和 LINQ 中执行此操作。数据是通过询问其他来源从外部引入的。没有其他方法可以将此唯一链接到我的数据,因为没有来自外部源的“ key ”可以链接到。所以从这个意义上说,时间戳值不是一个选项。我知道这种方法并不“精确”,但我可以接受。我可能会添加手动审查可能的哈希匹配并在可接受的情况下将它们进一步提升到数据库中的功能。

最佳答案

Jon - 另一种方法是将时间戳列添加到表中(或对象中)。将其设置为 UTC 并完成它。当然,您可以就编辑的并发性等问题争论不休,但如果您只比较哈希列值,则确定最新的编辑/差异会困难得多。

但是,如果散列列方法是“必须”的,那么在不同文化的数据库安装中您应该非常小心,因为机制可能会有所不同。在这种情况下,我会仔细考虑时间戳与哈希的优点。

[编辑]乔恩,根据你最近的编辑,我建议在你的对象上创建一个自定义的 GetHashCode() 和 Equals() 并使用比较器为你做繁重的工作。我快速谷歌了一下,想知道什么可能有用。一个合理的(2 分钟谷歌)起点可能在这里:

http://www.eggheadcafe.com/community/aspnet/2/78458/hashcode.aspx

这是一个快速代码示例(基于您对用于哈希的名称和地址的要求 [谢谢 resharper :-)]):

public class ContactDetails
{
public string Name { get; set; }
public string Address { get; set; }
public string Village { get; set; }
public string Town { get; set; }
public string PostCode { get; set; }

public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (ContactDetails)) return false;
return Equals((ContactDetails) obj);
}

public bool Equals(ContactDetails other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.Name, Name) && Equals(other.Address, Address);
}

public override int GetHashCode()
{
unchecked
{
return ((Name != null ? Name.GetHashCode() : 0)*397)
^ (Address != null ? Address.GetHashCode() : 0);
}
}
}

典型用法:

bool isChanged = ContactFromServer1.Equals(ContactFromServer2);
//etc..

希望对你有帮助

关于c# - 使用 c# .net 创建数据库列的简单哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5028028/

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