能否在Cosmos DB输入绑定的SqlQuery中使用动态参数?如何实现?
在Azure Cosmos DB的CosmosDBInput绑定中使用动态参数
可以在CosmosDBInput绑定的SqlQuery中使用动态参数,主要有两种常用实现方式,以下是具体说明和示例:
方式1:直接通过绑定表达式引用参数
通过{参数名}的绑定表达式语法,直接引用函数的输入参数、触发器数据等。注意SqlQuery的字符串语法要避免引号冲突。
修正后的示例代码:
public async Task<string> SomeFunction( [ActivityTrigger] string input, [CosmosDBInput( databaseName: "dbname", containerName: "containername", SqlQuery = "SELECT * FROM c WHERE c.prop = {input}", // 直接引用ActivityTrigger传入的input参数 Connection = "DBConnection" )] List<someobject> pages, FunctionContext executionContext) { // 函数业务逻辑 return "处理完成"; }
方式2:使用参数化查询(更安全,防SQL注入)
如果需要传递多个参数,或者想规避SQL注入风险,推荐用SqlQueryParameters属性传递参数集合,这种方式会自动处理参数转义。
示例代码:
public async Task<string> SomeFunction( [ActivityTrigger] QueryParams input, [CosmosDBInput( databaseName: "dbname", containerName: "containername", SqlQuery = "SELECT * FROM c WHERE c.prop = @targetProp AND c.status = @targetStatus", SqlQueryParameters = new { targetProp = "{input.TargetProperty}", targetStatus = "{input.TargetStatus}" }, Connection = "DBConnection" )] List<someobject> pages, FunctionContext executionContext) { // 函数业务逻辑 return "处理完成"; } // 定义参数模型 public class QueryParams { public string TargetProperty { get; set; } public string TargetStatus { get; set; } }
注意事项
- 绑定表达式中的
{参数名}必须对应函数中存在的输入参数,或BindingData中的键 - 禁止直接拼接字符串到SqlQuery中,优先使用上述两种方式避免SQL注入风险
- 参数化查询中,SqlQuery用
@参数名占位,再通过SqlQueryParameters映射到实际参数
内容的提问来源于stack exchange,提问作者redar ismail
相关产品推荐
相关产品推荐

