簡體   English   中英

為什么我的參數沒有被替換?

[英]Why is my Parameter not being substituted?

我正在使用以下查詢來查詢CosmosDB,由於存在ARRAY_CONTAINS,我無法使用LINQ。問題是我的應用程序崩潰,因為SQLParameter從未被替換,因此為null異常。

查詢看起來像這樣

     var sqlStatement = new SqlQuerySpec
    {
      QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, @category)",
      Parameters = new SqlParameterCollection()
    {
       new SqlParameter{ Name = "@category", Value = "Homeware" }
    }
  };

   IDocumentQuery<JObject> query = client.CreateDocumentQuery<JObject>(
 collectionUr
 sqlStatement)
 .AsDocumentQuery();

 while (query.HasMoreResults)
{
  items.AddRange(await query.ExecuteNextAsync<JObject>());
}

您可以參考以下對我有用的代碼:

var Parameters = new SqlParameterCollection()
       {
          new SqlParameter(Name = "@category", Value = "Homeware")
       };

IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
        uri,
        new SqlQuerySpec
        {
         QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, " + Parameters[0].Value + ")" 
        });

抱歉,傑伊的答案是錯誤的。 他的方法實際上並沒有參數化SqlQuerySpec,而只是將字符串連接起來,而字符串卻不能正確地參數化查詢。 就像沒有開始的參數收集一樣。

我只是用完全相同的數據集測試了您提供的代碼,這絕對好。 空異常與SqlParameterCollection沒有關系。

相同的代碼工作:

使用的數據集

![]()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM