使用PetaPoco正确传递基于字符串的参数

时间:2017-05-02 08:56:51

标签: c# petapoco

在我们的开发环境中使用PetaPoco时,我们写了一个像这样的Fetch命令:

DB.Fetch<object>("SELECT Col1, Col2 FROM Tablename WHERE Col1 = @0, parameter)

结果命令看起来很像这样:

SELECT Col1, Col2 FROM Tablename WHERE Col1 = parameter

在大多数数据库版本中,这很好,但是当目标数据库移动到运行SQL Server 2014的环境时,很明显这已经不够了 - SQL Server 2014强制要求包装varchar /单引号中基于字符串的参数,而以前的版本能够在执行查询时进行类型确定,这绝不是问题。

我无法重现这个问题,因为我没有可以提供的SQL Server 2014环境,但很明显SQL正在尝试解析它认为是字符串的整数,并看出它看起来像什么十六进制值。对于发生的事情并不是特别有用的指示,我授予你

合乎逻辑的结论是让我们的Fetch看起来像这样:

DB.Fetch<object>("SELECT Col1, Col2 FRMO Tablename WHERE Col1 = '@0', parameter)

令人讨厌的是,我们的最后一个命令如下所示:

SELECT Col1, Col2 FROM Tablename WHERE Col1 = '@0'

我已经尝试了许多不同的编写fetch命令的方法,包括使用SqlParameter对象作为参数数组中的第一个参数,将类型定义为varchar,但我无法让查询工作,因为我期望。我最接近的是使用string.Format或插值字符串,但这会带来明显的安全风险,我宁愿避免它。

我发现this question似乎暗示“正确”的做法是删除单引号,但正如我所说,这是MSSQL 2014中的破解行为+ ...

这不是PetaPoco的支持功能,还是我错过了什么?

0 个答案:

没有答案