将字符串与数据库中的字符串进行比较返回 false
Posted
技术标签:
【中文标题】将字符串与数据库中的字符串进行比较返回 false【英文标题】:Comparing a string to it's equal in a database returns false 【发布时间】:2020-03-23 22:34:35 【问题描述】:我想在我的数据库中找出哪一行的“路径”字段的值等于字符串"c:\something\somethingelse\anotherthing.thing"
。
在发出SQL
请求之前,我通过浏览找到了该行并复制了它的内容:
在C#
方面,我的代码如下所示:
编辑:由于@CompuChip 的评论,我编辑了我希望可能会更好的东西
String MyPath = "c:\\something\\somethingelse\\anotherthing.thing"
MyPath = String.Format("select * from x where path = '0'", MyPath);
然后我调用了方法来创建请求并将请求发送到我的数据库,但我遇到了一个异常
我在我的数据库上尝试了请求本身,但即使我复制了确切的值,它也找不到该行: 这是我尝试过的:
Select * from x where path = "c:\something\somethingelse\anotherthing.thing"
Select * from x where STRCMP(path, "c:\something\somethingelse\anotherthing.thing") = 0
有没有正确比较字符串并找到我的行的好方法? 感谢您抽出宝贵时间,祝您有美好的一天。 编辑 2: 我还尝试在 C# 中获取我的所有行,然后一一比较它们。 它起作用了,但是超过 10K 行它开始消耗资源
【问题讨论】:
"但我遇到了异常" - 那会是什么异常? 在 sql 中,字符串带有单个 qoutes, 请请不要这样构造你的SQL查询。 ***.com/questions/7505808/… 不仅添加参数是安全的做法,它还可以让您的引用问题不再是问题。 我添加了 mysql Workbench 看来我必须在 C# 中做同样的事情,并在路径中放置两个反斜杠而不是一个,即使在 MySQL 中请求也适用于 MySQL,但我仍然在 C# 中收到错误跨度> 【参考方案1】:拜托,拜托,拜托不要这样构造你的 SQL 查询。
正确的解决方案是使用参数,如下所述: Why do we always prefer using parameters in SQL statements?
你的 C# 代码会变成这样(改编自链接的答案):
string sql = "select * from x where path = @path";
using (SqlCommand command = new SqlCommand(sql, connection))
var pathParam = new SqlParameter("path", SqlDbType.VarChar);
pathParam.Value = @"c:\something\somethingelse\anotherthing.thing";
command.Parameters.Add(pathParam);
var results = command.ExecuteReader();
或者,对于 MySql,
string sql = "select * from x where path = ?path";
using (MySqlCommand command = new MySqlCommand(sql, connection))
var pathParam = new MySqlParameter("path",
@"c:\something\somethingelse\anotherthing.thing");
command.Parameters.Add(pathParam);
var results = command.ExecuteReader();
假设您(已经检查过您)实际上在数据库中有匹配的记录,那么问题可能出在引用或值的转义上。 如果确实如此,那么使用参数来检索记录不仅是安全的做法,它还会使您的引用或转义问题不再是问题。
【讨论】:
糟糕,我刚刚编辑了我的帖子,然后看到了你的答案,我要更改我的代码 我认为现在的问题是针对 MySQL 的。更新您的答案以改用MySqlCommand
,尽管关键点保持不变。
问题似乎是因为我正在寻找文件路径(带有反斜杠等),当我正在寻找另一种类型的字符串时,假设“名称”我会找到一些行
感谢@TanveerBadar,添加了,但我不经常使用 MySQL,所以我希望我的语法正确。
是的,我觉得很好。【参考方案2】:
看来我必须在 C# 中做同样的事情,并在路径中放置两个反斜杠而不是一个,即使在 MySQL 中也是如此
此外,我还必须按照@CompuChip 的提示正确构建我的请求。
感谢大家的帮助!
【讨论】:
以上是关于将字符串与数据库中的字符串进行比较返回 false的主要内容,如果未能解决你的问题,请参考以下文章
Python:将空字符串与 False 进行比较是 False,为啥?