C# 比较单词并获得精确匹配
现在这很棘手。。。我希望我能解释清楚 我有一个表格,里面有名字,我需要将它与我提供的单词进行比较,得到准确的匹配结果 现在我说这很棘手,因为我尝试了这个查询,它给了我一组名称。它包含了一个完全匹配的单词,还有一些相似的单词 这就是我所做的:C# 比较单词并获得精确匹配,c#,asp.net,sql,search,C#,Asp.net,Sql,Search,现在这很棘手。。。我希望我能解释清楚 我有一个表格,里面有名字,我需要将它与我提供的单词进行比较,得到准确的匹配结果 现在我说这很棘手,因为我尝试了这个查询,它给了我一组名称。它包含了一个完全匹配的单词,还有一些相似的单词 这就是我所做的: DataTable dt = new DataTable(); SqlConnection connection = new SqlConnection(); connection.ConnectionString = Con
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["xyz "].ConnectionString;
connection.Open();
SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name Like '%' + @userName + '%'", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlCmd.Parameters.AddWithValue("@userName", userName);
sqlDa.Fill(dt);
connection.Close();
现在我想要的是。。。比如说
如果数据库有三个单词
abc123
xyz123
pqc1238
如果这个词是123,它应该
返回abc123和xyz123
如果是c123,则返回abc123,而不是pqc1238和xyz123
如果是238,则返回pqc1238
我希望我足够清楚。。。相信我,我第一次也没拿到
任何建议最好是找出单词之间的精确匹配。。因为喜欢是不够的
谢谢据我所知,您似乎只需要以搜索模式结尾的字符串,所以您所要做的就是从选择中省略最后一个“%”
SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name Like '%" + @userName + "'", connection);
在我看来,您正在搜索以@userName结尾的字符串
SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name Like '%' + @userName", connection);
我不会称之为完全匹配,但如果您要查找以给定单词结尾的单词,请尝试:
"SELECT Names FROM Machines WHERE Name Like '%' + @userName"
没有第二个%它读起来好像您想要一个命令,它的形式是从机器中选择名称,其中名称像“%xxx”,其中“xxx”是您的单词 如果是这样,并且@userName是您的单词,那么您需要类似的东西
SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name Like '%' + @userName", connection);
为什么不尝试使用LINQ呢?做一些类似的事情
var query = from c in db.Machines where c.Name.EndsWith("123") select c.Names;
我希望这能有所帮助。我觉得您需要所有以特定单词结尾的记录。在这种情况下,您只需删除添加到查询中的最后一个“%”
SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name Like '%' + @userName", connection);
希望这就是您所需要的您几乎完全正确,但您不理解%通配符 在SQL中,%通配符将匹配任何长度的字符串。你希望一开始就这么做,因为你不在乎主要部分 但是,当您将其放在相似匹配字符串的末尾时,如果字符串后面出现任何内容,则允许进行匹配 以你为例 abc123 xyz123 pqc1238 现在,如果单词是123,则应返回abc123和xyz123如果是c123,则返回abc123和>而不是pqc1238和xyz123 如果是238,则返回pqc1238 您有%123%,您的意思是“我想要所有以任何内容开头的字符串,然后有'123',然后以任何内容结尾。”这将匹配任何点上包含'123'的字符串 你想说的是“我想要所有以任何东西开头的字符串,然后有'123',然后结束。”所以,这就是%123 最后,要获得与like的精确匹配,只需去掉任何通配符
对SQL通配符有很好的概述。这很好。。。得到这么多的回复,我想没有人会理解。。。谢谢你所有的答案都是正确的,但是我把正确的答案给了第一个回答的人。。。对不起,我不能给所有人…你提供的答案是正确的,但用户名后没有“+”。。。我发现了…我必须开始使用LINQ。。我不擅长这项工作。。你能给我推荐一个好的地方开始阅读LINQ或任何好的教程吗。。。谢谢