Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Informix和Dapper向查询添加参数失败,出现语法异常_C#_Asp.net Mvc_Informix_Dapper - Fatal编程技术网

C# 使用Informix和Dapper向查询添加参数失败,出现语法异常

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_慷慨])).

我正在尝试通过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_慷慨])).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?