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

时间:2014-06-03 16:11:14

标签: c# sql postgresql

我将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论坛上得到答案,但没有运气: Parameterized Query as Procedure Parameter? | Devart Forums

1 个答案:

答案 0 :(得分:2)

我想我理解你的问题。尝试通过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;
相关问题