System.Data.Common.DbCommand:参数化查询作为过程参数

本文关键字:参数 查询 过程 System Common DbCommand Data | 更新日期: 2023-09-27 18:06:33

我在PostgreSQL中定义了一个过程:

CREATE OR REPLACE FUNCTION CreateCursorC(text, text)
 RETURNS text
 LANGUAGE c
AS '$libdir/mylibs', $function$createcursorc$function$
执行例子:

SELECT CreateCursorC('cursor_name', 'SELECT a FROM x WHERE a=''text''');

当然我想使用参数(DbCommand.Parameters)。这样的:

SELECT CreateCursorC($1, 'SELECT a FROM x WHERE a=$2');

不幸的是,它不能工作,因为参数$2是在引号中。是否有一种方法来完成这个任务使用参数和,而不是通过编写自定义SQL转义函数?

我试着在Devart论坛上得到答案,但没有运气:作为过程参数的参数化查询?| Devart论坛

System.Data.Common.DbCommand:参数化查询作为过程参数

我想我理解你的问题。当我试图通过c#在MySQL中设置一个包含LIKE表达式的参数化查询时,我遇到了类似的问题。

在LIKE表达式的情况下,我发现的技巧是使%字符成为参数的一部分。在你的例子中,相同类型的逻辑可能适用于你引用的文本。

下面的代码片段显示了我在我的例子中所做的:

IDBCommandParameters cmdParams = dbContext.CreateDBCommandParameters();
cmdParams.AddParameter(QueryConstants.likeParam, string.Format("%{0}%", likeFilter));
List<TQueryResult> companies = LoadModelList<TQueryResult>(dbContext.Find(QueryConstants.findCompaniesLikeStatement, cmdParams, false), "");
return companies;