我的数据库中有一个用户表,其中包含“全名”字段
在我的工具上,我上传了一些文件,然后在数据库中插入数据之前,我通过比较数据库中的全名字段和文件上的全名字段来检查用户是否存在(例如唯一的选择,我无法比较ids)。
我的问题是:当这些字段包含两个以上的字时,如何比较这些字段?
有时候全名不合规,例如:
-------------------------------------------------
| Database || File |
-------------------------------------------------
| Michael Yves Pierrot || Pierrot Michael Yves |
| Martin Dupont || Dupont Martin |
| Ben Jack Dupont || Ben Dupont Jack |
-------------------------------------------------
当只有两个单词时,我可以使用这样的分割:
public string getId()
{
string result;
QueryModel Query = new QueryModel();
string sql = "SELECT Username_Id FROM USERNAME WHERE Full_name = '"
+ Full_name.Replace("'", "''") + "'";
result = Query.ExecuteCommand(sql, "int");
if (result != "0")
{
string FullName2 = Full_name.Split(' ')[1] + " " + Full_name.Split(' ')[0];
sql = "SELECT Username_Id FROM USERNAME WHERE Full_name = '"
+ FullName2.Replace("'", "''") + "'";
result = Query.ExecuteCommand(sql, "int");
}
return result;
}
注意Query.ExecuteCommand(sql, "int");
在用户不存在时返回"0"
。
因此,如果我的函数getId()
返回"0"
,我将插入新用户,如果它返回其他内容,则表示用户存在并将返回Username_Id
任何人都有想法?
感谢。
答案 0 :(得分:5)
你可能会做如下的坏事(由于潜在的性能成本而不好):
SELECT Username_Id
FROM USERNAME
WHERE Full_name LIKE '%Michael%' AND Full_name LIKE '%Pierrot%'
'%'运算符用于通配符。 https://msdn.microsoft.com/en-us/library/ms189454.aspx
我还要对您的查询进行参数化以防止SQL注入。
答案 1 :(得分:1)
感谢@ user1666620我修改了我的功能,新代码是:
public string getId()
{
string result;
QueryModel Query = new QueryModel();
string[] fullName = Full_name.Replace("'", "''").Split(' ');
string fullNameSQL = "";
for (int i = 0; i < fullName.Count() - 1; i++)
{
string fn = "Full_Name LIKE '%" + fullName[i] + "%' ";
fullNameSQL = (fullNameSQL == "") ? fn : fullNameSQL + " AND " + fn;
}
string sql = "SELECT Username_Id FROM USERNAME WHERE " + fullNameSQL;
result = Query.ExecuteCommand(sql, "int");
return result;
}