解决 选择在哪里

PDS8475

活跃的成员
加入
2019年6月25日
消息
41
编程经验
Beginner
你好

我有以下select语句
Cmd.CommandText = "Select EquipmentMake, EquipmentModel, EquipmentSerial FROM Repairs WHERE CustomerName like @Name";
但这只有找到结果,如果输入值@name完全像它在数据库中。如何更改它,以便用户可以进入保罗或保罗,并找到相同的结果?
我相信这将是之前回答的,但我只能找到有关使用%和_的信息,这意味着特定最小长度的特定字符。

提前致谢
 
Last edited:

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,700
地点
悉尼,澳大利亚
编程经验
10+
首先,您是否包括参数值中的一个或多个通配符?如果没有,你为什么要使用 喜欢 instead of =?

至于问题,您使用的是什么数据库?在执行此类比较时,我不知道默认情况下区分大小写的数据库。我并没有对每个数据库都有巨大的经历。也许 喜欢 表现出不同于=。
 

PDS8475

活跃的成员
加入
2019年6月25日
消息
41
编程经验
Beginner
嗨参数中没有通配符,我使用了,而不是=
我正在使用Microsoft Access数据库。
就像你说我没想到它会区分大小写,当我发现它有敏感=时,我切换成像认为会解决它的思考。也许它是因为数据库中的值CustomerName使用AES 256bit加密。因此,进入“保罗”为“保罗”提供了不同的加密字符串。我没有考虑一下,也许我需要将其更改为标准化输入,因此如果输入“保罗”,它会自动更改为“保罗”。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
尝试使用 Cmd.CommandText = "Select EquipmentMake, EquipmentModel, EquipmentSerial FROM Repairs WHERE CustomerName like @l_name*@u_Name";
Each parameter will need to be set separate, one with capital letter, one without. The * suggests looking for either. I am no fan of Access DB, so I am unaware of any other way to do what you want. It's easier to do in modern professional DB such as MySQL DB's etc.
 

PDS8475

活跃的成员
加入
2019年6月25日
消息
41
编程经验
Beginner
我用了这条线 string n = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Detail_textBox.Text);
并将n作为参数。这是有效的,但我必须在所有表格上进行。
谢谢您的帮助。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,859
地点
切萨皮克,va.
编程经验
10+
我讨厌SQL,不要经常使用它,所以带有巨大的盐。当我曾经积极使用SQL并且我想做不敏感的匹配时,我会强迫大写或小写。所以SQL会是如下:
SQL:
"Select EquipmentMake, EquipmentModel, EquipmentSerial FROM Repairs WHERE UPPER(CustomerName) = @Name";
然后将准备参数:
C#:
cmd.Parameter.AddWithValue("@Name", Detarl_textBox.Text.ToUpper());

作为一个快速抛开,我认为访问的SQL没有接受"@name"参数。我觉得它只是 公认"?" parameters 而且您需要按照使用参数的顺序添加参数。这是因为您通常会使用OLEDB或ODBC连接来连接到MS访问数据库。

除了另一边,要小心我的问题......
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
跳伞运动员您可以使用两者,请参阅: 使用MS Access / OLEDB的参数/ OLEDB - VB.NET片段|梦..in.Code.

While it is VB.NET, the principle is the same regardless if for C#. So in the case of : Cmd.CommandText = "Select EquipmentMake, EquipmentModel, EquipmentSerial FROM Repairs WHERE CustomerName like ?*?"; which should be the same as :
Try use Cmd.CommandText = "Select EquipmentMake, EquipmentModel, EquipmentSerial FROM Repairs WHERE CustomerName like @l_name*@u_Name";
唯一的区别是需要按照它们的顺序调用参数。 ;)

语法应该像它一样工作。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,859
地点
切萨皮克,va.
编程经验
10+
好的发现!显然,文档MS提供不正确。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
通常情况是,为什么人们比写作他们的人更聪明地更聪明。 :/

In theory, you are also correct, since the documentation does state that the correct way; is to use nameless parameters ? and not named parameters @myParam. The difference being that both will work, but the correct preference is actually to use nameless parameters in ADO.Net, which such parameters should be executed in the order they are written in the statement. To further point out, that is irrelevant and unnecessary when using named parameters. :)
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,153
地点
挪威
编程经验
10+
为参数分配名称允许您以稍后通过集合中的名称查看,如果您正在编写修改现有参数值的代码。对于OledBParameterCollection来说也是如此。当我理解时,查询中不使用该名称,只有其位置。
 
最佳 底部