c# - 使用 table api 时 cosmos 不返回任何记录
问题描述
如何使用 table api 查询数据库以返回记录?
我的文件如下所示:
{
"id": "069c2612-355a-4659-b680-048b7ef19f5c",
"_rid": "3RtVAMJ2mQkBAAAAAAAAAA==",
"_self": "dbs/3RtVAA==/colls/3RtVAMJ2mQk=/docs/3RtVAMJ2mQkBAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-8cc3-3e8f580501d4\"",
"FieldType": "InsuranceCode",
"TranslateFrom": "XTH",
"TranslateTo": "removed",
"SourcePaerty": "TMH",
"DestinationParty": "GE",
"Key": "/TMH/GE/InsuranceCode",
"_attachments": "attachments/",
"_ts": 1544032329
}
我正在尝试使用 cosmos 的 table api 简单地读取记录:
public static IEnumerable<Translation> ConnectAndFetch () {
var connectionString = "myconnectionstring;";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse (connectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient ();
CloudTable table = tableClient.GetTableReference ("translationCollection");
TableQuery<Translation> query = new TableQuery<Translation> ();
return table.ExecuteQuery (query);
}
但是,不会返回任何记录!
我究竟做错了什么?如何查询我的数据集并返回记录?
使用示例如下:
static void Main(string[] args)
{
var mystuff = CosmosTableConnector.ConnectAndFetch().Take(5).ToList();
}
如您所见,结果为 0:
解决方案
它尝试使用下面的 table api .net 代码来查询我在 cosmos db table api 中的数据。这个对我有用。
static void Main(string[] args)
{
//CloudTable table = CreateTableAsync("j").Result;
//var result = QueryTableAsync("test").Result;
TableQuerySegment <ResponseEntity> resultE= QueryTableAsync("test").Result;
foreach(ResponseEntity re in resultE)
{
Console.WriteLine("Timestamp: "+re.Timestamp);
Console.WriteLine("------------------------------------------");
}
Console.WriteLine("execute done");
Console.ReadLine();
}
public static async Task<TableQuerySegment<ResponseEntity>> QueryTableAsync(string tableName)
{
string cst = "DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***;TableEndpoint=https://***.table.cosmosdb.azure.com:443/;";
CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(cst);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference(tableName);
var filter = TableQuery.GenerateFilterConditionForDate(
"Timestamp",
QueryComparisons.GreaterThanOrEqual,
DateTimeOffset.Now.AddDays(-10).Date);
Console.WriteLine(filter);
var query = new TableQuery<ResponseEntity>();
var result = await table.ExecuteQuerySegmentedAsync(query, null);
return result;
}
我的数据:
输出:
根据您的示例数据,我推测您的数据存储在 Cosmos SQL API中,而不是Table API中。然后是不同的数据库。
如果要查询sql api,需要参考这个sdk:https ://docs.microsoft.com/en-us/dotnet/api/overview/azure/cosmosdb?view=azure-dotnet
推荐阅读
- python - 如果满足条件,需要遍历行以检查条件并从不同列中检索值
- android - 当错误说它不应该时,为什么这在 api 21 上有效
- qt - 较早创建但较晚启动的 QTimer 不起作用
- javascript - 如何正确地将 keyup() 函数应用于具有不同输入的不同 DOM 元素?
- salesforce - 如何在商机的自定义字段中报告序列化数据?
- java - ReentrantLock tryLock(timeout,timeUnit) 无法按预期工作
- swift - 点击 UINavigationController UINavigationTabBar Item 时如何调用函数?
- javascript - Jquery 函数没有在应该的时候向 Dom 元素添加类。尝试构建按钮功能幻灯片
- android - 在 SSLContext 中使用硬件支持的密钥
- c++ - 使用柯南包管理器提升链接错误