如何解决使用C#的Azure表存储插入未插入表
我是Azure Table Storage的新手,并且学习了许多教程,但无法获得任何代码来将数据插入表中。实际上,我现在通过导入具有数据的csv文件来使用Azure Storage Explorer填充表。我可以使用以下代码从这些表中检索数据。
public async Task<CurrencyEntity> GetCurrencyDataForDate(string currency,string date)
{
//ensure variables match key formats
currency = currency.toupper();
//var stringDate = date.ToString("yyyy-MM-dd");
var table = GetCloudTable(CcdConn,TableName);
var retrieveOperation = TableOperation.Retrieve<CurrencyEntity>(currency,date);
var result = await table.ExecuteAsync(retrieveOperation);
var dto = result?.Result as CurrencyEntity;
return dto;
}
CurrencyEntity在哪里
public class CurrencyEntity : TableEntity
{
public CurrencyEntity() { }
public CurrencyEntity(string currency,string date)
{
Currency = currency;
Date = date;
PartitionKey = currency;
RowKey = date;
}
public CurrencyEntity(string currency,string date,string close)
{
Currency = currency;
Date = date;
Close = close;
PartitionKey = currency;
RowKey = date;
}
public string Currency { get; set; }
public string Date { get; set; }
public string Close { get; set; }
}
但是这种方法虽然可以运行直到完成并返回CurrencyEntity
public async Task<CurrencyEntity> InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)
{
//ensure values have proper format
currencyEntity.Currency = currencyEntity.Currency.toupper();
var parts = currencyEntity.Date.Split("-");
if (parts.Length != 3) return null;
if (parts[0].Length != 4 || parts[1].Length != 2 || parts[2].Length != 2) return null;
TableResult result;
var insertOrMergeOperation = TableOperation.InsertOrMerge(currencyEntity);
var table = GetCloudTable(CcdConn,TableName);
// Execute the operation.
try
{
result = await table.ExecuteAsync(insertOrMergeOperation);
}
catch (Exception e)
{
//Value cannot be null. (Parameter 'Upserts require a valid PartitionKey') The details are:
var message = $"{e.Message} The details are: {e.InnerException}";
throw;
}
//var result = await table.ExecuteAsync(insertOrMergeOperation);
var newCurrency = (CurrencyEntity)result.Result;
return newCurrency;
}
它返回如下所示的newCurrency
即使没有异常,错误的Timestamp属性也会给出一些故障指示。 检索此数据时,它返回null(未插入)
解决方法
我认为问题是由于您实际上在InsertOrMerge
函数中使用的是Insert
方法而不是InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)
方法。
如果要插入新记录,请使用Insert
方法,如下所示:
public async Task<CurrencyEntity> InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)
{
//other code
TableResult result;
//var insertOrMergeOperation = TableOperation.InsertOrMerge(currencyEntity);
//use the Insert method if you want to add a new record.
var insertOrMergeOperation = TableOperation.Insert(currencyEntity);
var table = GetCloudTable(CcdConn,TableName);
//other code
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。