执行参数工作不正确的查询

时间:2019-06-05 10:51:28

标签: c# oracle

我有一个带两个字段的学生表(id:数字,名称:10个字符) 名称列的示例值是:'William [2 space]','Ethan [5 space]' (将添加空格以满足最大长度)

下面的查询工作正常。 (硬代码或字符串插值)

 select * from where name = 'William'
or select * from where name = 'William  '

但是当我使用如下参数时,它不起作用

select * from where name = :Name

and then inject the parameters
var result = ctx.ExecuteStatement(query, new { Name = name })

So when name = 'William  ', it work.
But when name = 'William', it doesn't work.

=>我希望它能在两种情况下工作吗?请帮我解决这个问题。

所以我的临时解决方案是在比较之前对列进行修剪。但是我认为这只是解决问题而不能完全解决问题,因为oracle会自动忽略空白(我在第一个示例中显示)

select * from where trim(name) = :Name

2 个答案:

答案 0 :(得分:2)

请勿使用char作为数据类型来存储长度可变的字符串。请改用varchar2

答案 1 :(得分:1)

您可以通过

添加空格
name = name.PadRight(10);

PadRight将文本向左对齐,并用空格填充字符串以获取定义的长度。