Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 使用PetaPoco正确传递基于字符串的参数_C#_Petapoco - Fatal编程技术网

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

C# 使用PetaPoco正确传递基于字符串的参数,c#,petapoco,C#,Petapoco,在开发环境中使用PetaPoco时,我们编写了一个Fetch命令,有点像这样: DB.Fetch<object>("SELECT Col1, Col2 FROM Tablename WHERE Col1 = @0, parameter) SELECT Col1, Col2 FROM Tablename WHERE Col1 = parameter SELECT Col1, Col2 FROM Tablename WHERE Col1 = '@0' 在大多数数据库版本中,这是可以

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

DB.Fetch<object>("SELECT Col1, Col2 FROM Tablename WHERE Col1 = @0, parameter)
SELECT Col1, Col2 FROM Tablename WHERE Col1 = parameter
SELECT Col1, Col2 FROM Tablename WHERE Col1 = '@0'
在大多数数据库版本中,这是可以的,但是当目标数据库被移动到运行SQL Server 2014的环境中时,很明显这还不够好-SQL Server 2014强制要求将基于varchar/字符串的参数用单引号括起来,而以前的版本能够在执行查询时确定类型,这从来都不是问题

我无法重现这个问题,因为我手头没有SQL Server 2014环境,但很明显,SQL正在尝试将它认为是整数的内容解析为字符串,并得出看起来像十六进制值的内容。我承认,这并不是一个特别有用的迹象

合乎逻辑的结论是调整我们的Fetch,使其看起来像这样:

DB.Fetch<object>("SELECT Col1, Col2 FRMO Tablename WHERE Col1 = '@0', parameter)
我尝试了许多不同的方法来编写fetch命令,包括使用SqlParameter对象作为参数数组中的第一个参数,将类型定义为varchar,但我无法让查询按预期工作。我最接近的方法是使用string.Format或插值字符串,但这会带来明显的安全风险,我宁愿避免

我发现这似乎表明“正确”的做法是删除单引号,但正如我所说,这是MSSQL 2014+中的一种破坏行为


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

您得到的错误是什么?如果没有引号,它在默认情况下无法工作,我会非常惊讶。因此,如果您无法重现问题,很难找到原因。但是,如果您有一个连接字符串示例以及如何创建数据库的示例,以及一个表示需要此查询的结构的简单表,那么您可以帮助我们更容易地重现,如果没有MVCE,则很难确定问题是在您这边还是在PETAPOCO那边,因为这是一个额外的信息,您以
参数
的形式发送什么?此处是PetaPoco维护人员。使用参数时不需要引号,因为db引擎将直接使用参数。当您执行类似于
DB.Fetch(“选择@0”,“测试”)
的操作时会发生什么?