C# 使用Informix和Dapper向查询添加参数失败,出现语法异常
我正在尝试通过ODBC对Informix使用参数化查询,但任何添加参数的尝试都会失败,出现以下异常:C# 使用Informix和Dapper向查询添加参数失败,出现语法异常,c#,asp.net-mvc,informix,dapper,C#,Asp.net Mvc,Informix,Dapper,我正在尝试通过ODBC对Informix使用参数化查询,但任何添加参数的尝试都会失败,出现以下异常: $exception{ERROR[42000][Informix.NET provider][Informix]发生语法错误。}System.exception{IBM.Data.Informix.ifxeexception} 以下是失败的代码: List items=con.Query(“从oe_cnvwrk中选择*,其中cwr_慷慨=@cwr_慷慨”,新建{cwr_慷慨=cwr_慷慨])).
$exception{ERROR[42000][Informix.NET provider][Informix]发生语法错误。}System.exception{IBM.Data.Informix.ifxeexception}
以下是失败的代码:
List items=con.Query(“从oe_cnvwrk中选择*,其中cwr_慷慨=@cwr_慷慨”,新建{cwr_慷慨=cwr_慷慨])).ToList()代码>
在没有参数的情况下使用它(如本例)可以完美地工作,但会使应用程序面临注入攻击:
ItemHeader ItemHeader=con.Query(“从oe_cnvhdr中选择*,其中hdr_control_id=“+hdr_control_id”).Single()代码>
我在这里找到了之前列出的关于这个问题的一个问题,但从未得到回答。我希望有人知道如何处理这个问题:
有什么想法可以解决这个问题,或者有没有其他方法可以用Dapper处理参数化问题?还没有发布到NuGet,但是现在包含了对伪位置参数的支持。这些都是通过模式识别实现的,因此文本中的?abc?
映射到从成员abc
命名的参数,但使用位置?
语法。因此,如果您发行:
List<ItemAttribute> items = con.Query<ItemAttribute>(
"select * from oe_cnvwrk where cwr_genero = ?cwr_genero?",
new{cwr_genero = cwr_genero}).ToList();
其中添加的参数是来自标记为cwr\u grano
的成员的参数。这样可以正确解析成员。特殊的?foo?
模式用作切换到位置参数的指示器
请注意,每个查询只能引用单个参数一次;以下操作将不起作用:
嗯,您确定ODBC支持@parametername语法吗?从内存来看,Informix只支持顺序?
参数,而不支持命名参数。Dapper目前没有很好的支持,尽管这是我想改进的地方。实际上,我已经有了执行此操作所需的大部分代码,因为我一直在使用dapper的java端口,而jdbc没有命名参数的概念。我愿意考虑通过“使用位置参数”标志或类似标志将这些更改合并到dapper中。想法?那当然很好。这会为OleDb提供商打开路径吗?(比如……嗯……访问?)@Steve想必是的,那会非常有用,是的,Mark!意味着我们不能多次使用同一参数(?a?)。我用的是oracleI,我用的是:a而不是?a?可以吗?na@user960567:a
不是位置选项-这是命名的-所以是的,命名参数应该可以正常工作。如果noteven:a显示的错误与我现在创建的2个变量相同,请告诉我
select * from oe_cnvwrk where cwr_genero = ?
select * from sometable where foo = ?x? or bar = ?x?