上溢或下溢异常查询Cosmos DocumentDB

时间:2018-06-20 14:24:30

标签: sql azure-cosmosdb

我在尝试查询Cosmos DocumentDB时遇到意外错误。我已经在Azure数据资源管理器中运行了查询,但是得到了预期的结果,但是,当我尝试使用C#SQL API运行它时,却遇到了各种错误(经过不同的尝试),包括“算术运算中的上溢或下溢”或“ NullReferenceException”。当我使用ReadDocumentAsync时,我得到的文档没有错误,所以我知道我的cosmos客户端和集合uri都可以。

有人可以帮助我理解为什么我对此有疑问吗

这是我构建和执行查询的方式:

        using (var cosmosClient = new DocumentClient(new Uri(cosmosEndPointUrl), cosmosAuthKey))
        {
            var collectionUri = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);
            var sql = @"SELECT TOP 10 p.Id As QuoteKey
                ,pol.Proposer.Forename
                ,pol.Proposer.Surname
                ,pol.Proposer.ResidentialAddress.Postcode
                ,veh.Vrn
                FROM Proposal p
                    JOIN pol IN p.QuoteRequest.Policies
                    JOIN veh IN pol.Vehicles
                WHERE(pol.Proposer.Forename = @Forename OR @Forename = '')
                      AND(pol.Proposer.Surname = @Surname OR @Surname = '')
                      AND(pol.Proposer.ResidentialAddress.Postcode = @Postcode OR @Postcode = '')
                      AND(veh.Vrn = @Vrn OR @Vrn = '')";
            var ps = new SqlParameterCollection(new SqlParameter[]
                                                    {
                                                        new SqlParameter { Name = "@Forename", Value = criteria.Firstname }, 
                                                        new SqlParameter { Name = "@Surname", Value = criteria.Surname }, 
                                                        new SqlParameter { Name = "@Postcode", Value = criteria.Postcode }, 
                                                        new SqlParameter { Name = "@Vrn", Value = criteria.RegNo }, 
                                                    });
            var sqlQuerySpec = new SqlQuerySpec(sql, ps);
            var fo = new FeedOptions { MaxItemCount = 10 };
            List<QuoteSummary> results = new List<QuoteSummary>();
            var query = cosmosClient.CreateDocumentQuery(collectionUri, sqlQuerySpec, fo).AsDocumentQuery();
            while (query.HasMoreResults)
            {
                var demiResults = await query.ExecuteNextAsync<QuoteSummary>();
                results.AddRange(demiResults);
            }

            return results.ToList();
        }

以下是另外两个使用的类:

public class QuoteSummary
{
    public string QuoteKey { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
    public string Postcode { get; set; }
    public string Vrn { get; set; }
}
public class QuoteSearchCriteria
{
    public string Firstname { get; set; }
    public string Surname { get; set; }
    public string Postcode { get; set; }
    public string RegNo { get; set; }
}

请帮助。在我正在参加Microsoft的Hack时,这个问题正在困扰着我,到目前为止,我没有人问过为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

当我遇到此异常时,它与环​​境和相关性有关:
我的配置是Azure App服务,该服务查询azure cosmosdb。
我所缺少的是Web API级别的Nuget package。显然,它作为其他类库中的依赖项存在,但已被引用,但没有在运行中的顶级应用程序(本例中为Web API)中直接引用。